Asperia Games

Building LOGFIRE in PICO-8

Why a game about reading production logs has no sprites, no scrolling background, and nothing on screen that isn't text you're supposed to read.

LOGFIRE: Signal Hunt started from a question I couldn’t shake after a bad week on call: what is the actual skill being tested when you’re staring at a log feed at 2am?

It isn’t reading speed. It isn’t knowledge of the system, exactly. It’s pattern recognition under a deadline you don’t control — deciding whether the thing you just saw is the beginning of something, while more things keep arriving.

That turned out to be a game mechanic.

The constraint came first

PICO-8 gives you a 128×128 screen, sixteen colours and a hard cap on how much code fits on a cartridge. Most people treat that as something to work around. Here it was the whole point: if the game is about reading under pressure, then every pixel spent on decoration is a pixel competing with the thing the player is supposed to be reading.

So there are no sprites. No parallax. No character. The screen is text on black, in the PICO-8 palette, and the only visual hierarchy is severity colour — green for INFO, yellow for WARN, red for CRIT.

Once that was settled, the rest of the design had nowhere to hide. Difficulty couldn’t come from tighter platforming or faster enemies, because there aren’t any. It had to come from the only three dials the format actually has:

  • how fast the feed scrolls
  • how often real incidents appear
  • how well they hide among the fake ones

Signal versus noise is the whole game

The first playable version was too easy in a way that took a while to diagnose. Every dangerous log was dangerous on its own — a CRIT line was always a real CRIT. Players learned to scan for red and ignore everything else, and the game became a colour-matching exercise.

The fix was to make the real incidents patterns rather than lines:

[WARN] packet drop 2%
[WARN] packet drop 3%
[WARN] packet drop 4%

None of those is alarming. Together they’re the shape of something failing. Meanwhile a lone CRIT that self-heals two lines later is noise dressed as a crisis — and responding to it costs you time you need later.

That single change is what made the game feel like the thing it’s about. You can’t win by reacting to severity. You have to hold a few lines of context in your head while new ones push the old ones off the top of the screen.

Escalation instead of levels

There are no levels. Instability starts near zero and climbs whenever a real incident goes unanswered; at 100% the system crashes and the run ends. Every run is the same system getting worse.

The feed also accelerates as you survive, which produces the arc I wanted: the first minute feels manageable, the third feels like you’re behind, and the fifth is you triaging badly and knowing it. Runs land between three and six minutes, which is about as long as that particular feeling stays interesting.

What I’d change

The control scheme went through more revisions than anything else, and the version on the BBS — arrows to move, Z to respond — is simpler than what I started with. An earlier build had separate keys for ignore, investigate and escalate. It was more faithful to real incident response and considerably worse to play: three keys meant three decisions per line, and the feed doesn’t wait for you to have opinions.

Collapsing it to one action key lost some nuance and gained the thing that actually matters, which is that your hands can keep up with your eyes.

Still on the list: daily challenge seeds, a hardcore mode with a faster baseline feed, and incident patterns that span more of the screen than three consecutive lines.