Devlog #010 — Directives: A Reason to Play Differently
Cosmetics gave PULSE//ZERO a reason to keep playing. Directives are how you earn them — a data-driven layer of around forty-four challenges that track what you actually do in a run and pay out in looks, never power. Here is how the challenge layer is built, and why every reward stays cosmetic.
Devlog #009 was about the what — the cosmetics you unlock and the hard line we drew around them: everything is a look, nothing is a buff. A fresh save and a fully-unlocked save play identically. This entry is about the how. Directives are the challenge layer that earns those cosmetics — and they carry the same promise forward. No directive will ever make your ship stronger.
What a Directive is
A directive is a goal. “Land your first kill.” “Take down 250 Hunters.” “Survive ninety seconds without taking a hit.” “Hold the maximum multiplier for ten straight seconds.” There are around forty-four of them in the shipped catalogue, sorted into categories — Combat, Movement, Survival, Power-Ups, Living Grid, Bosses, Exploration, Mastery, and Secrets — and graded by rarity from Common up through Legendary.
They sit above the Unlocks system from #009. An Unlock is a thing you own; a directive is the reason you came to own it. When a directive that carries a cosmetic reward completes, it doesn’t grant power — it hands the unlock request straight to the Unlocks system, which decides whether that look becomes available to equip. The directive is the achievement; the cosmetic is the trophy; equipping it is always optional and always reversible.
Why we built it
A neon arena shooter can be deep without ever telling you so. Directives are how we surface that depth without a tutorial. A combat directive that asks you to rack up bomb-kills teaches you the bomb timing window exists. A movement directive about dashing nudges you to actually use the dash. A grid directive rewards you for triggering surges. Each one quietly points at a system and says try this.
Just as importantly, they reward you on bad runs. You don’t have to win to make progress — kills, dashes, and survival time all accumulate across attempts, so a run that ends in disaster still moves three or four bars forward. That’s the engine behind “one more run.” The reward is never a leg up next time, only a new way to look while you do it. Power creep would quietly punish anyone who hadn’t ground out the unlocks; keeping rewards cosmetic is what lets the scoreboard stay honest.
How it works
At the centre is DirectiveManager, an autoload that boots after the Unlocks
system. On startup it scans resources/directives/ and loads every .tres file
it finds. Each one is a DirectiveDefinition — pure data: an id, a title and
description, a category and rarity, the metric it watches, the target value, how
that value is tracked, and an embedded reward.
id = "untouchable"
title = "Untouchable"
description = "Survive 5 minutes without taking damage."
category = DirectiveCategory.Category.SURVIVAL
rarity = DirectiveRarity.Rarity.LEGENDARY
metric = "clean_time"
target = 300
track_mode = DirectiveDefinition.TrackMode.SESSION
Because the goals are data, the manager never hard-codes a single challenge. It
listens to the game’s event bus — enemy_killed, player_dashed,
grid_surge_triggered, multiplier_changed, and the rest — and accumulates a
small set of metrics from them. There are three ways a metric is tracked:
ACCUMULATE for lifetime totals (kills, dashes, runs), MAX for personal bests
(best score, best multiplier), and SESSION for the best you managed inside a
single run (a clean-time streak, seconds held at the multiplier ceiling).
Every time a metric moves, the manager re-evaluates only the directives that watch it and completes any that have crossed their target. Adding a brand-new directive that reuses an existing metric needs no code at all — just a data file. That seam between data and logic is the same one we leaned on for enemies and the Director in earlier entries; it’s how the catalogue can keep growing without the brain getting more tangled.
Secrets, gates, and a guard rail
Not every directive shows its hand. Secret directives stay hidden in the menu behind a redacted teaser until you complete them — at which point the banner plays a left-to-right glitch-decode of the title, so the reveal lands as a surprise rather than a checklist item. Others are gated: a directive can name a prerequisite, so a mastery chain only opens up once you’ve cleared the step before it.
There’s also a quiet guard rail worth mentioning, because it bit us once. Several directives are tuned against the combo system’s maximum multiplier. If someone authors a multiplier goal above that ceiling, it becomes dead content — literally impossible. So on boot the manager checks every multiplier-based target against the actual cap and logs a warning if anything is unreachable. It’s a small thing, but it’s the difference between a designer catching the mistake at startup and a player chasing a goal that can never complete.
Telling you it happened
When a directive completes, the moment is celebrated in proportion to its rarity. A queued banner slides in with a glow, a particle burst, a brief screen pulse, and an ascending synth sting — louder for rarer goals — while the Living Grid itself sends a matching ripple out from the centre. In the thick of combat the card is deliberately small and quick; between runs it gets the full treatment. The game-over screen then sums up what you completed that run, what you unlocked, and which directive you’re closest to finishing next — one last nudge toward the next attempt. During play, up to two directives you’re near can ride along in the HUD with live progress bars, auto-selected by how close you are or pinned by hand.
Next time
That’s the progression spine in place: cosmetics in #009, and now the challenge layer that earns them — the reason to keep coming back and playing differently.
As always: we build in the open.
- pulse-zero
- design
- progression