Baren81 Devlog

Galaxy18 – I Asked the AI to Weaken a Boss and It Only Lowered HP

Devlog card: "Weaken the boss — it only lowered HP" — Balance is more than one number.

Written by

in

,

Call the Cat: Galaxy Build Log · Devlog #18

I do not write code and I cannot read it. Call the Cat: Galaxy, the Unity sequel to a game I already shipped, is written line by line by AI agents. My job is to say what I want, set the rules they work under, and check whether what comes back is actually right.

This one is about asking for exactly the change I wanted and getting it — and it not being enough.

“This boss is too hard, make it weaker” — and it still was

Every planet in our game has a boss. In testing, one boss felt too hard, so I told an AI: “make this boss weaker.” It found the boss health value and lowered it. Compilation passed.

I played it again and it was still hard. The health was clearly reduced, but the ranged attacks still came in with no gaps, and the telegraph line that warns you where to dodge was still too short to react to. What I wanted to feel weaker wasn’t the health number — it was those three things combined into one wall of pressure. The AI touched the one value I named.

Perceived difficulty isn’t one value, it’s three

Of August’s 374 commits, 45 had “boss” in the title. That’s how much time went into one boss, and most of it was the same problem: touch one value and two others move with it.

Widen the ranged attack range and there’s no room left to dodge, so it gets harder. Lengthen the telegraph line and you get reaction time, but the screen is that much more covered. Raise the health and it’s steadier, but the fight drags and gets boring. The three values each pull on a different axis — difficulty, cramped view, boredom — and those axes fight each other. “Weaker” as a single word carries no information about which axis to move, or by how much.

How boss health, ranged attack range, and telegraph length each pull on difficulty, boredom, and how covered the screen feels.
How boss health, ranged attack range, and telegraph length each pull on difficulty, boredom, and how covered the screen feels.

And those values weren’t even in one place

There was a second problem. The values that decide “how strong this boss feels” were scattered across several scripts. Health lived in the boss data. Range lived in the attack-pattern code. Telegraph timing lived in the presentation layer. Ask an AI to “make it weaker” and it fixes whichever file it notices first. It doesn’t go looking for where the rest of them are.

So we added a clause to our dev-rules doc: combat-related values get changed in one place only. When the values are scattered, the next person to touch them — human or AI — doesn’t know where to look.

Give the AI a balance map before you ask

Now, before handing balance work to an AI, I write down which values make up the feel I want to change, and hand that over with the request. Here’s the format.

What I want to changeThe value that makes that feelWhere the value livesThe other axis it moves
Boss feels too strong → weakerBoss healthBoss data fileLower it and the fight gets shorter
Getting hit with no breathing roomRanged attack interval / rangeAttack-pattern codeWiden it and difficulty drops sharply
No time to dodgeTelegraph display timePresentation codeLengthen it and the screen gets covered

Only the first row is something we actually changed in the boss data this time — the other two rows are there to show how the table gets filled in. Splitting up what you used to lump into one word like “weaker” lets you check which value the AI touched and which ones it left alone.

The balance map table format: feel to change, value behind it, where it lives, other axis it moves.
The balance map to fill in before handing balance work to an AI.

When handing the code to an AI, add this one line:

“Does changing this value affect other values that shape the same feel? If it does, list all of them with their file paths before you change any code, and stop.”

What this post comes down to

Code compiling, and the value you named actually changing, doesn’t mean you get the result you wanted. A game’s “feel” is usually built by several values pulling on each other, and an AI will change only what you named without knowing they’re connected. Writing down which values build that feel, before you hand it off, beats fixing it and then asking “why is it still the same?” over and over.

This adjustment is done as far as static checking goes. How the same boss feels across the three difficulty tiers — Normal, Night, Hell — still has to be confirmed by actually playing it. Numbers can’t tell you that.

Worth reading together

The problem of an AI missing the other call sites that use the same rule is covered here — it’s the companion to this post’s “the values were scattered.”

Galaxy06 – The AI Only Patched One of Three Call Sites

And on the gap between a change compiling and a change being checked:

Galaxy05 – “Fixed” and “I Checked” Are Not the Same Thing


Solo dev of Call the Cat, shipped after 178 days on Google Play and Steam. Now building the sequel, Call the Cat: Galaxy, in public.