Published 2026-09-14
Every toll warden in REELS switches behaviour under 50 percent health, and for months nothing on screen announced it. On 18 August I painted them red, erased eight identities, and started over. Here is the threshold that lives in one place, the two colour values that failed, and what phase two actually changes for all eleven wardens.
A boss that changes behaviour halfway down its health bar is one of the oldest good ideas in the genre. A boss that changes behaviour and does not look any different is a bug report waiting to be filed, and for a long stretch of this year that is exactly what REELS shipped.
REELS is a roguelite built on a slot machine. The reels drop on their own, your weapons fire on whatever they land on, and a toll comes due at the end of every floor. Every third toll, a warden comes down with you. On 18 August 2026 I spent an afternoon making the second half of those fights visible, and I got it wrong twice on the way.
Under half its health, a warden already played differently. The Taxman doubled his volley rate and fired a wide fan instead of a tight one. The Tamer stopped keeping her distance. That was in the engine and it worked.
Nothing on screen changed. Not the colour, not the silhouette, not one pixel.
So a player met a new rule mid fight with no announcement, and the reasonable reading of an unannounced rule change is that the game is broken. You do not think "it escalated". You think "why did that hit me". A difficulty spike you cannot see is indistinguishable from a bug, and the whole argument of this game is that you lose for reasons you can name.
The threshold was written inline, in the volley loop, as a bare `0.5`. The drawing code had no access to it.
The obvious move was to write `0.5` again on the drawing side. That would have been worse than the original defect. Two copies of a number drift. The day one of them changes, you get a warden painted as enraged that is not, or an enraged warden that looks calm, and a game that lies about its own rules is worse than a game that stays silent about them.
So the threshold moved onto the creature itself, and it is still the only place it exists:
```swift var acharne: Bool { kind.isBoss && maxHP > 0 && hp <= maxHP * 0.5 } ```
The volley loop reads it. The drawing reads it. They cannot disagree.
The `maxHP > 0` guard is not decoration. `maxHP` is zero for the instant between a creature being constructed and the spawn assigning its health, and without that clause `hp <= maxHP * 0.5` is true for a newborn. Every warden would have been born enraged for one frame.
I repainted the body flat red and put a nine point radial crown around the beast. It looked terrible, and the reason was structural rather than aesthetic.
Flat repainting erased identity. Eight wardens became the same red man. A monster you can no longer recognise is not an enraged monster, it is a different monster.
The radial crown already existed. Ten lines further down the same file, gold elite enemies wear a crown of orbiting sparks. I had just given the same radial halo to two states that have nothing to do with each other.
The fix was to stop turning the hue and start dropping the luminance. It took three attempts to land.
At 0.68 toward the dark of the pit, all eight wardens converged on the same red anyway. Too far is the same as flat.
At 0.46, the real flaw appeared, and it was not a matter of degree. The Ferris Wheel is cyan and the Magnetizer is blue. Blending a cold colour toward a warm one passes through grey. Those two did not become enraged, they became washed out.
What shipped is 0.52 toward the bottom of the pit with the hue untouched. Nobody passes through grey, all of them stay recognisable at a glance, and the darkened body becomes the backdrop the accent sits on. It is also the more accessible of the two options, because a luminance difference reads without perceiving colour at all.
A generic halo announces "this is worse" without saying in what way. So each warden got its own accent, drawn to show what its phase two actually changes:
Three rules hold the set together. One shared pulse for all of them, so the pit has a single tempo instead of eleven. The accent is drawn inside the warden's own layer, so it follows the creature's breathing instead of floating next to it. And every measurement is expressed in `r`, the engine's collision radius, so nothing ever claims to reach further than the body that can actually hit you.
One correction came from a screenshot rather than from reasoning: the Ferris Wheel's arc was ember red and drowned in the red of its own gondolas. Against a cyan wheel and red cars, light brass is the only warm colour that separates.
The bespoke accents were right and still too quiet in play. I had overcorrected from the flat red. So the final version changes four things simultaneously, because none of them is enough alone:
1. The body darkens by 0.52 with the hue intact. 2. The outline goes red and thickens by 90 percent, from 1 to 1.9. This is the cheapest change that touches the *shape* instead of adding something around it, and it redraws the whole silhouette at once. 3. The eyes go red. On a creature, the gaze is the most read signal there is, ahead of the shape and ahead of the colour of the body. 4. A crest grows along the back. Nine spines, ranged tall at the centre and small at the edges, each a two arc curve rather than a triangle, each with its own slight breathing offset. Regular spines make a comb. Irregular ones make an animal.
The numbers below are the ones in the shipped engine today, calm value first, enraged second.
| Warden | Calm | Under half health | |---|---|---| | The Taxman | 3 shards every 6 s | 6 in a wide fan every 3 s, plus an 8 point ring born on the arena edge and converging on where you stand | | The Tamer | 4 dogs, pack fury 2.2 s, every 7 s | 6 dogs, fury 3.4 s, every 5 s, and she stops fleeing | | The Magnetizer | 2 s pull every 6 s, discharge of 6 | continuous but weaker pull, discharge of 10 | | The Siamese | lunges 44 points every 3.4 s | 66 points every 2.2 s | | The Barrel Organ | ring of 8 every 4 s | ring of 12 every 2.6 s | | The Ferris Wheel | 2 gondolas at the centre every 4.2 s | 4 every 2.8 s | | The Fortune Teller | 3 circles every 4.4 s | 5 every 2.8 s | | The Human Cannonball | aim and land, 3.6 s | 2.2 s | | The Caterpillar | changes course every 2.6 s | every 1.2 s, 1.5 times faster, burning puddle at each turn | | The Slugger | one 56 point zone every 3.2 s | two 84 point zones every 1.6 s, the second where you would be if you fled straight | | The Stagehand | throws one piece of furniture every 2 s | two every 1.3 s |
One of those is a deliberate refusal. The Barrel Organ's enraged ring is denser and more frequent, but it is still one ring. Two simultaneous rings would be twenty four teeth touching each other, which is not an attack, it is a wall no movement crosses.
Pack fury and magnetic pull do not describe a warden, they describe the world. A pack that speeds up. A player being dragged.
Since 18 August, two wardens can be on the bill at once, double at tolls 12 and 18, triple at toll 24. So two Tamers is a real situation, and the code takes a `max` rather than adding: the longer window wins, the intensities never compound. Stacking would have asked the player to tell two superimposed furies apart on the same pack, which nothing on screen can show. Illegible and unfair at the same time.
The migration that let every warden act independently, rather than only the first one found, is verified by reading the code and by the compiler. It is not verified by an image. Eight wardens summoned in a debug arena kill an idle player in about four seconds, so no screenshot exists of their volleys interleaving. The observable proof is the double bill at toll 12, which is a real fight a real player can reach.
I would rather write that down than let the tidy version stand.
Eleven wardens, one every third toll, drawn from a bag that will not hand you the same one twice in a row. Each fight has two halves, and the second half is announced by four simultaneous signals before it is announced by damage.
The point was never to make wardens harder. It was to make the moment you have to *unlearn* the first half legible, so that dying to it feels like being outplayed by a machine rather than cheated by one.
REELS is on the App Store. The trial runs through toll 5, which includes exactly one warden and both of its phases, and one purchase unlocks everything permanently. No ads, no lives, no continues. Get REELS.