Skip to content
Devlog

Enemies weren't using everything their ships can do

A ship with glowing engines flying over a city park beside a street of office towers, with a missile's fireball bursting beside it and a second ship small in the distance

Every enemy ship in Wreckwing can boost, chase and get on a target’s tail, but after a full run through the game’s seven cities we saw that the enemy pilots rarely did any of it. This post covers why, and what changed.

What we measured first

The game logs every fight ten times a second, with positions, speeds and what the enemy is trying to do. We read 48 recorded flights from October 10 and 11.

To test each change we use headless duels (no graphics, in an arena of blocks). One computer pilot flies as an enemy does and another chases it the way a player does, straight at it and boosting to close the gap. Both hulls are 10 times tougher than normal, since at normal toughness the pilots shot each other down within seconds. A test run is 16 duels of up to a minute.

In the recorded flights the nearest enemy was boosting 4% of the time, on the player’s tail 4%, had the player on its own tail 17%, and was circling 2%. In the duels, before any change, the same measures were 1%, 1%, 17% and 5%, close enough to stand in for play.

Three causes

The pilot braked out of every boost. An enemy pilot feels its way with short rays, called whiskers, cast 40 m ahead. It brakes when a wall is closer than the distance it needs to stop, plus 8 m. Boost takes a ship toward 70 m/s, and past about 52 m/s that distance is longer than the whiskers reach. In open air every boost looked like a wall ahead, so at the next decision the pilot dropped the boost and swerved 63 degrees. The pilot now also reads a 120 m ray down its nose and along its path.

Personality never reached the scripted pilot. Each enemy spawns with a personality for aggression, caution and mobility. Only the experimental trained pilot read aggression and caution, and the game flies the scripted one. In the duels, aggressive and cautious pilots each boosted 1% of the time and were each chased 17%.

There was nothing to choose. The pilot picks among four goals: pursue, attack, break off and reposition. It boosted only when pursuing from far away or breaking off, and in an attack it strafed one way until a wall turned it, so two ships in the open orbited each other.

Four moves inside the goals

Inside its goals, a pilot can now fly four moves, each for a few seconds:

  • Run-down: boost toward the target until back in range.
  • Tail: get about 30 m behind the target, nose on it, matching its speed.
  • Extend: boost away in a clear direction, then return.
  • Kickstop: with a chaser close behind, brake hard so it overshoots, sidestep, and turn on it.

At each decision, every move that fits the moment gets a score weighted by personality. Aggression raises run-downs, tails and kickstops, and caution raises extending. The pilot picks at random, from its own seeded random numbers, among the moves scoring within half of the best, so the same build and seed replay a fight the same way. An attack’s strafe now changes side every 1.2 to 3 seconds in the open, so two ships no longer settle into an orbit.

A bar chart titled “How an enemy flies, before and after”, showing the shares of time in the 16-minute duels before and after the change

Headless duels, 16 minutes before the change and 16 after. The tail result is against another enemy and the others are against a player-style chaser.

Damage is counted in full hulls at normal toughness. The enemy dealt 2.27 a minute where it dealt 1.19, and took 3.72 where it took 2.46. It bumped into walls 3.0 times a minute, up from 2.4.

An aggressive pilot went from 1.6 to 4.0 damage dealt a minute and from 17% to 8% of its time chased. A cautious pilot went from 0.8 to 0.5 and from 17% to 28%.

Fewer enemies attacking at once

The same run showed a second problem: too many enemies attacking at once. At most two now attack at a time. The others wait about 110 m off with their nose on the player, guns and missiles quiet. A slot held for 8 seconds passes to an enemy that has waited 3. An enemy the player has locked onto or is within 30 m of still fights back.

We tested this on the run’s levels 3 to 7 against a bot player that charges the nearest enemy: three seeds a level, up to 2 minutes each, the bot’s ship four times as tough so levels would last.

No slots Two slots One slot
Damage the player takes a minute 5.2 4.3 3.1
Time with three or more attacking 19% 9% 0%
Levels lost of 15 7 4 2

The bot is a poor shot (2 to 4 kills in 26 to 29 minutes), so the table measures pressure on the player rather than how levels end for a good one.

Easy and hard modes

On October 11 the run gained easy and hard modes. Hard is the run as built, with two attack slots and about one city in four at night. Easy has one enemy fewer in each level of three or more (14 enemies against 19) but keeps the harder enemies that carry missiles, allows one attacker at a time (the one-slot column above), makes the player’s ship half as tough again, and is all by day.

What is still open

Every setting is a starting value, and retraining the experimental trained pilot on the moves is open. All of this is in the development build as of October 11.

Provenance

How this post was made

Drafted by
A Claude Code session in the trilithon.games repository, October 11, 2026, working from the game's changelog, docs and tracker.
What it did
Drafted this post from the game's changelog, the enemy maneuvers notes and the dev journal entry, and checked each number against them.
Reviewed by
Alex van Rossum,

On the roadmap: The run: a ladder of cities

Linear MIP2-768, MIP2-706, MIP2-459commits 3a1cd6d, e1c1765, c771367