Devlog

Armory War devlog #2: The simulator that keeps us honest

Devlog Armory War 2 min read

BalanceSim plays hundreds of runs for us. It caught seeds quietly making the game harder and a final boss that wasn't the hardest fight.

Armory War has a second player that never sleeps: BalanceSim, a tool that plays hundreds of complete runs — shopping, forging, fighting — and prints what happened. Every balance change goes through it, and it has saved us from ourselves more than once.

Seeds made the game harder, and nobody noticed. We added seed codes so a run could be shared: type 5WN2 and you get the same shops and the same enemies as your friend. All tests passed. Then we ran BalanceSim again, just to be safe — and run completion had fallen from about 10% to 6%.

The cause was subtle. The first version tied each opponent to the fight number. But losing doesn't advance the fight number, so a defeat handed you the exact same opponent again, and the post-fight shop refresh rolled the exact same shop. Lives exist so that a loss has a price but the run can continue; meeting an unwinnable matchup a second and third time is not that. Now every life you spend is part of the seed, and completion came back to 12–14%.

The final boss wasn't the hardest fight. The simulator showed fight 20 being won only ~40% of the time — harder than the final boss at ~54%. The obvious fix was to give the two new boss abilities to the "easy" bosses at fights 5 and 10. Measured, that made the game easier: the new Sap ability is much lighter than the Enrage it replaced. So abilities were placed by weight instead: Enrage to fight 10, the softest boss, and Sap to fight 20. The gap between the easiest and hardest boss shrank from 42 points to 32, and the wall at fight 20 became a slope.

Seeds you can read from a screenshot. Seed codes use 32 characters with no I, O, 0 or 1, and typing is forgiving: case doesn't matter, and those four are folded into the letters they get confused with. Only those four — an early version also folded L into J, which quietly sent every seed containing an L to a different run.

The lesson we keep relearning: the first bad number is often the measurement's fault, not the game's — so the tool gets checked against things we already know are balanced, before we trust it on anything new.

Keep reading

More from the devlog

Release Orbit Swarm

Orbit Swarm is out now on Google Play

Our pixel-art space roguelite has landed on Android. Pick a ship, chart the Star Map and fight through 30 waves to the Overlord.

1 min read
Devlog Mutaspire

Mutaspire devlog #3: The Rot, and why the doors open at 70%

A roguelite needs pressure, but pressure that kills you feels cheap. How the Rot keeps you moving without being unfair — and the "kill everything" rule that playtesting talked us out of.

2 min read
Devlog YARIK: Idle Boss Hunt

YARIK devlog #3: Into the Rift

The main game plays itself. The Rift doesn't. Thirty seconds, one character, no auto-attacks — how we turned a too-easy side mode into the most active part of YARIK.

4 min read