Skip to content

Attract Mode: A Love Letter To The Empty Store Shelf

KN-86 DECKLINE — FIELD DISPATCH TRANSMISSION 02 / 01.05.26


In 1988, every machine that knew how to behave understood one thing: idle time is not silence. Idle time is performance.

The arcade cabinets knew. Pac-Man cycled through its ghost-name screen every twelve seconds — Blinky, Pinky, Inky, Clyde — and then ran a demo round with nobody holding the controls, the joystick navigating a maze with eerie competence. The Street Fighter II cabinet showed you the fight before you could decide whether to put the quarter in. The Atari Lynx on a Babbage’s shelf played Blue Lightning on its own, pulling strangers by the eyes across a retail floor. The Amiga demo disks — not technically attract mode, but the same animal — ran Boing Ball until someone sat down.

The convention: when no operator is present, the device demonstrates itself.

Not a screensaver. A screensaver is a machine going to sleep. Attract mode is a machine trying to get your attention — actively, commercially, with the full force of whatever it has to say about itself. The coin-op industry perfected this because an idle machine in a busy arcade is a machine losing revenue. The solution was to make the idle state interesting enough to start costing you quarters.

Handheld machines had a version of this too. The Game Boy’s boot sequence — the Nintendo logo descending, the single-sample chord — was brief, but it was a ritual. You knew it was about to do something. The Game Gear’s startup bloom. The Lynx’s checkerboard. Every machine had its moment before the cartridge took over. The attract loop was the machine’s answer to the question: what are you?


Until last week, the KN-86 emulator booted into a black screen with an amber cursor.

That cursor blinked. It waited. It did nothing.

This is a machine I’m designing as a fictional 1988 device — a piece of equipment from a Japanese-American consortium that never quite got to market, whose real history is weirder and more compromised than the box copy lets on. The fiction says Kinoshita Electronics Consortium built the KN-86 for a specific class of operator: people who work outside the conventional economy, who run contracts for untraceable credits, who carry their entire professional identity on a handheld terminal the size of a hardback book. These people do not own quiet devices. They own devices that project.

A blank cursor was a 2020s affectation pretending to be 1988. Real 1988 machines did not sit quietly.

The silence was wrong in a way it took me a while to name. It wasn’t just aesthetically off — a black screen doesn’t match the aesthetic vocabulary I’ve spent months building. It was functionally off. The KN-86 is built around cartridge identity. Slot ICE Breaker and you’re a network intrusion specialist. Slot Depthcharge and you’re running underwater drone reconnaissance. Every cartridge changes what kind of operator you are. If the machine doesn’t demonstrate that identity when idle, it’s lying about its design intent.

So I built the ritual back.


The KN-86 now cycles attract sequences on idle. Fifteen seconds with no input and the machine starts talking to itself — cycling through pre-rendered amber animations, one per loaded cartridge. The YM2149 chip fires SFX cues timed to the frames. The sequences loop. Drop a cartridge in and the attract mode yields. Pull it out and the demo resumes, from the beginning.

The format is .kn86clip — the same binary primitive that powers in-mission cutscenes and loading animations. Region-aware playback: each clip owns a rectangular subregion of the 80×25 text grid, so the firmware can composite multiple demos onto a single screen if it wants to later. Keyframe-and-delta encoding. A typical attract loop runs six to eight source frames and weighs three to six kilobytes.

Authoring happens through one of two paths. The Remotion-backed TypeScript DSL in kn86-attract/ is the right tool when you need deterministic, scene-graph-level control — that’s what marketing uses for hero demo reels. Cart authors who want a simple attract reel without learning React can drop ASCII frame files into a <cart>_attract/ directory and run make_clip.py against it. Same binary either way. The device can’t tell which tool produced it, and neither can the player.

The player itself is about 200 lines of C with no heap allocation in the hot path. The whole thing fits in the head.

Four launch carts ship with attract content. Each one is a small piece of theater.


ICE Breaker opens on a network topology: (OP) at the top of a tree, [TGT] at the bottom, intermediate nodes strung on pipe-and-plus ASCII edges. A cursor walks the edges — (N1) lights up, then (N3), then the target node ticks from [TGT] to *TGT* <<< BREACH. The payout strip appears at the bottom: 1 NODE COMPROMISED PAYOUT 800 c THREAT 3. Then: contract clear. extracting...

The clip runs silent until the breach frame, where a short YM2149 cascade fires. It’s the first sound the emulator makes if you let it sit. It sounds like a lock opening.

This is the game telling you: this is a precision instrument for moving through systems that don’t want to be moved through. If you pick up this cartridge, you’re the person who walks the edges.

Depthcharge starts different. The sonar grid is passive — (V) centered in a 14×16 box, nothing on the edges, the sidebar reading passive / silent. Then it pings: concentric ) characters radiate outward at 1.2 kHz. The echo returns as . marks, then o marks, then # marks as the hull-class-2 contact resolves on bearing 087. The HULL and O2 counters tick down in the sidebar. The contact classification firms up. Then the grid goes quiet again: surface intercept resolved.

There’s no violence in this clip. The drama is the act of knowing — passive, patient, reading the return signal. Depthcharge operators wear headphones. They listen for things other people can’t hear.

NeonGrid is the one that shows its puzzle. A 16×14 maze of # characters and open paths, [O] the operator’s position. Move east. Move east again. Hit a wall, read the sonar reveal. Route south. Move to the exit column. The clip ends mid-wave: WAVE CLEAR / + 250 pts / next: WAVE 4. The move counter drops from 17 to 10 across six frames.

This attract sequence doesn’t try to look cool. It shows you the problem and solves it in front of you. NeonGrid players are methodical. They see the maze before they enter it.

Black Ledger is the slowest reel. A case board: accounts, linked transactions, amounts in credits. HOLDING-A 2.4M c. Drill into SUB-A1. A transaction table loads. Flag TXN-003 as QUOTE. Find TXN-005 — same amount, same counterparty class. EQ match. CONS -> evidence appended. The evidence chain builds: [TXN-003] -> [TXN-005] :: PAIR. Verdict: LAUNDERING HIGH. PAYOUT +1200 c.

The clip uses CAR, CDR, QUOTE, EQ, and CONS — the Lisp key semantics from the paradigm spec — as verbs the operator will learn to execute. Black Ledger players read before they move. The attract mode teaches them the grammar before the tutorial does.


There’s a design philosophy question underneath all of this: who is the attract mode for?

For coin-op cabinets, the answer was obvious — foot traffic, the undecided quarter. For a single-operator handheld terminal, the answer is murkier. There’s no foot traffic. The machine is sitting on your kitchen table at 2 AM, cycling through amber animations for a room that’s empty.

One reading: the machine is demonstrating itself to itself. Rehearsing the contracts it expects to run next time you slot a cart. The network topology walking its own edges in the dark. The sonar grid pinging an empty ocean. The maze solving itself again and again.

Another reading: the attract mode is the machine keeping its edge. A device that can look like this while idle looks like something worth picking up.

Both are true. I built it because an idle machine that looks this good is its own advertisement — a maker-space table, a trade show booth, a friend’s living room floor. But the fiction earns the second reading too. In the Kinoshita worldbook, a KN-86 is an identity. These operators don’t own quiet things.

The Raspberry Pi Zero 2 W prototype is the next hardware milestone. The same .kn86clip bytes that run on the desktop emulator will run on-device without modification — no remapping, no resizing, same player on a different platform. When the prototype boots for the first time, the attract mode should be the first thing it does.

I want the first thing the physical hardware says to be: here is what kind of device I am.


> CIPHER: ATTRACT SEQUENCE CYCLING.
> CIPHER: no operator. running anyway.

Transmission 03 goes deeper on one contract — ICE Breaker, start to finish. What it looks like to open a mission, read the brief, walk the network, and close the contract. That essay needs a working prototype screenshot. I’ll know if I have one by Monday.

If you want to see the attract sequences running: the emulator builds on macOS with brew install cmake sdl2 and about five minutes. Source at github.com/jschairb/kn86-deckline.

The Field Dispatch comes out on Fridays, when there’s something worth writing about. If you’re new here: kn86-deckline.com, single-field signup.

Forward this to someone who still has their Game Boy in a shoebox somewhere.


> CIPHER: TRANSMISSION ENDS.
> CIPHER: STAND BY FOR 03.

GREAT WESTERN PRODUCTIONS · 2026