Finding why the new enemies felt soft

On October 12 Wreckwing got a roster of eight kinds of enemy, each with its own weapon, to sit beside the original enemy fighter, the Raven. Pitting a dodging test player against eight enemies described how we built and balanced it. On the night of October 15 we flew a full run on Hard against the roster, and it felt too easy. For the first four or five levels the player seemed to be the only one fighting. Three runs against Ravens alone the same night came much closer to the fight we want.
Reading the two nights side by side
Every fight the game plays is recorded ten times a second: where each enemy is, what it is trying to do, and how much its weapons have taken off the player. The game counts that damage in blows, and a fresh ship stands about two and a half.
| The roster | The Ravens | |
|---|---|---|
| Time the enemies spent attacking | 23% | 20% |
| Damage their weapons did, a minute | 0.25 blows | 1.54 blows |
| of which from guns | 0.13 | 0.09 |
| of which from missiles | 0.12 | 1.45 |
The obvious explanation was wrong. The new enemies attacked as much as the Ravens did, and guns did little on either night. The difference was missiles. Each time one was fired, a Raven’s missile did about ten times what a roster missile did, and the roster’s easiest kinds carried none at all.
Finding where the tests went wrong
The roster was balanced before anyone flew it. Each kind fought a scripted stand-in player in headless fights, which run the simulation with no screen, and each was tuned until it did about what a Raven does to that stand-in. Measured against our own flights, the stand-in understates a Raven’s harm to a real player four to five times, and it overstated the new kinds’ harm by two to fifteen times. So “as dangerous as a Raven” in the test came out at about a sixth of that in play.
The stand-in still shows whether something changed. It can’t say whether the change feels right, and the project’s rules now say so. Every flight also records how each enemy missile ended (a hit, a near miss, dodged, or into a wall), so the next comparison can tell a weak missile from one that misses.
Cutting the roster to five
- The Raven joins the roster as the general fighter and is the most common enemy at every level: 42,117 of 49,990 escorts over 2,000 Hard runs.
- The Picket, the easy long-range kind, now carries one missile on a long reload.
- The Lancer, the medium long-range kind, fires its wall-piercing missile with a Raven’s warhead.
- The Salvo is now a missile boat with no gun and a battery of eight light missiles, shown above fanned out across a park. One of them does little, and the whole barrage does a lot.
- The Warden, the boss, takes the first moves of the Salvo and the Lancer the player met on the way, then the Dozer’s ram.
The Wasp, the Bruiser, the Stinger and the Dozer are no longer drawn into runs. Against the juking stand-in, the one comparison it can still make fairly, the Picket does 0.55 of an easy Raven’s harm a minute, the Salvo 1.06 of a medium Raven’s, and the Lancer 1.1 on the same measure. Our next flights decide whether that holds in play.
Adding mosquitoes
The Wasp failed in a way worth learning from. It was a fast ship with a single cannon that waited its turn to attack, and in the roster run it did 0.01 blows per enemy-minute. Mosquitoes are built against that failure. They are small gun ships that come on top of each city’s enemies and never wait for a turn. A mosquito circles the player at 20 to 40 m, dodging side to side, and fires a spray of 12 rounds a second, curving in, whenever its nose is near where the player will be. Twenty of the player’s rounds bring one down. Easy brings one or two a level, and Hard two or three.
With two mosquitoes beside a medium and an easy Raven, the stand-in lost 3.9 blows to enemy rounds, against 1.16 with the two Ravens alone. One or more enemies attacked it 92% of the time, against 42%.
A miss should press the player too. An enemy round that passes within 4 m of the player’s ship without hitting it now makes a snap, a tick and a short whiz falling in pitch, from where it passed. A mosquito’s spray is a run of snaps.
Mosquitoes are on by default in the development build as of October 17. The five-kind roster is still a choice beside the Ravens, and both wait on our next flights.
How this post was made
- Drafted by
- A Claude Code session in the trilithon.games repository, October 17, 2026, working from the game's dev journal, changelog, commits and tracker.
- What it did
- Drafted this post from the game session's journal entry of October 16, added the roster's new numbers, the mosquitoes and the near-miss sound from the changelog, and checked each number against the changelog and the commit messages.
- Reviewed by
- Alex van Rossum,
On the roadmap: The run: a ladder of cities
Linear MIP2-842, MIP2-843, MIP2-844, MIP2-860, MIP2-861commits ab1cef2, 2cfeecd, 6289486, 83c0dcb, 9bd45f9, 5693aa7