Devlog #005 — Mini-bosses
The Adaptive Director decides when a run earns a mini-boss. This is what shows up: a reusable boss chassis, an encounter that never overstays its welcome, and the Elite Hunter — three telegraphed mechanics that reward reading tells over out-DPSing.
Devlog #003 ended on a hook: once a run is deep enough, the Adaptive Director can resolve a Peak into a mini-boss instead of looping back to calm. This is the entry about what actually shows up when it does — and the framework that makes adding more of them cheap.

A mini-boss owns the spotlight — the Juggernaut floods the arena with expanding shockwaves.
A chassis, not a one-off
We’ve leaned on the same idea through this whole series: build the reusable
seam, then make content cheap. Enemies were chassis + behaviour brain (#002).
Mini-bosses are the same shape, one level up. A MiniBoss base class owns
everything every boss needs:
- health and the hit-flash
- the invulnerability window system
- the intro trigger
- the death-and-reward sequence
- arena clamping
- and a “never overstay” lifetime cap
A specific boss is then a small subclass that overrides just two things —
_ai() (how it behaves) and _draw_body() (how it looks) — plus a data file
for its stats. Everything structural is shared, so the next boss, and
eventually the major bosses, need almost no new framework code.

Same chassis, a different _draw_body() and _ai() — the Warden reads as its own threat entirely.
@export var max_health: float = 70.0
@export var score_reward: int = 5000
@export var max_lifetime: float = 75.0 # it leaves if you can't finish it
@export_multiline var description: String = ""
It must be beaten on its own terms
One small architectural decision carries a lot of design weight: a mini-boss
lives in its own scene parent, not in the Enemies node with the rank and
file. Why? Because arena-wide effects — your bomb, a grid surge — iterate the
Enemies group and wipe everything in it. If the boss lived there, you could
trivially delete it with a panic bomb.
It still sits on the enemy collision layer and joins the enemies group for aim
assist, so your shots and your hurtbox interact exactly as you’d expect. It just
can’t be swept away. A mini-boss has to be beaten on its own terms. That’s the
whole point of it being a boss.
The encounter has a shape
A good boss fight is a complete beat: it announces itself, it escalates, and it resolves cleanly. The chassis enforces that shape.
Arrival. On spawn it fires the same notification system every landmark
moment uses — a NEW THREAT intro card with the boss’s name and a line of
character — and the HUD swaps in a boss health bar. The music lifts; anomalies
suspend. The game tells you, unmistakably, that the rules just changed.
The fight. Health drains as you land hits, the bar tracks it, and the boss’s mechanics play out (more below).
Resolution — two ways out. Beat it and you get a premium death beat:
shockwave, heavy screen shake, a dissolve, and the reward. Or — and this matters —
if you can’t finish it inside its max_lifetime, it simply leaves. It
fades out and the run continues. A mini-boss never becomes a war of attrition
that stalls the whole run; it’s a spike, not a wall.
The reward. Defeating one pays a flat score bonus (no combo multiplier, so it’s predictable) and grants a bonus life — capped at five, the system we built back in the progression pass. It can also hand out a cosmetic unlock. Beating a boss should feel like getting something, not just surviving.
Case study: the Elite Hunter
The first mini-boss is the Elite Hunter — the honest, readable Hunter from #002, evolved into something that demands you read it. It has three mechanics, and the design rule for all three is the same: telegraphed, dodgeable, and punishing only if you stop paying attention.
-
Predictive stalk. It doesn’t home to where you are — it leads to where you’re going, aiming a fraction of a second ahead of your velocity. Strafing in a lazy circle gets you clipped; you have to actually break its prediction.
-
Burst dash. It plants, winds up for a beat (your tell), then lunges at 4.2× speed along a predicted line. Crucially it’s briefly invulnerable during and just after the dash — so you can’t simply face-tank it and trade. You dodge the lunge, then you punish the recovery.
-
Energy pulse. It stops, charges a visibly expanding warning ring, then detonates a radial blast. Stand in the ring when it fires and you take the hit. The entire defence is reading the telegraph and clearing the radius in time.
Every one of those has a visual tell drawn right into the boss — the wind-up pause, the growing pulse ring, the dash streak. Nothing one-shots you out of nowhere. The fight is a conversation: it asks a question, shows you the question first, and gives you the window to answer.
Why it’s built this way
The mini-boss framework is the bridge to the big stuff. By spending the effort on a clean chassis now — shared health, intro, reward, lifetime, and a two-method override seam for mechanics — every future boss, up to and including the major bosses, is mostly design work, not plumbing work. Same philosophy as the enemies and the Director: build the reusable spine once, then make the content fast and the behaviour the only thing you’re really authoring.
That closes the loop we opened in #002: the cast, the conductor that summons them, and now the headline acts. Next we’ll likely turn to the Living Grid — the stage all of this performs on — or the soundtrack that listens to it. As always: we build in the open.
- pulse-zero
- design
- bosses