Coinop
Fourteen arcade games as a Resolume plugin

What it does
Fourteen arcade games that run inside a Resolume composition, in Arena and Avenue. It comes as two plugins rather than one, because FFGL only resolves one entry point per binary: Coinop is a source that draws a playfield over its own background, and Coinop Over is an effect that draws one over the clip it's sitting on. The game itself is a dropdown rather than a separate plugin. Fourteen games don't need twenty-eight entries in the effect list, and a fifteenth won't need two more.
Snake grows, turns and eventually traps itself. Bricks is a ball, a paddle and a field to knock holes in. Marchers is a formation that steps down the screen and shoots back, speeding up as it thins out, as it should: that speed-up was the best accident in the original. Rally is two paddles and one ball. Drift is a ship with momentum and rocks that split. Stacker drops polyominoes and clears any contiguous run rather than a full row. Chase carves a fresh maze every level and sets four pursuers on it, each with its own idea of where you're going. Girders is a climb up floors that hazards come tumbling back down. Swarm is a formation that attackers peel out of, dive from and rejoin. Trails is riders who never stop, leaving walls behind them. Reflex is a prompt, a closing window, and the right button or nothing. Rafters is hitting the floor from underneath to flip whatever's standing on it. Duel is two fighters with wind-up, active and recovery frames, best of three. Flapper is one button against gravity, through the gaps in a wall that scrolls past, and it's the one game here that had to be given a difficulty ramp rather than a difficulty setting, because a competent flier at a fixed difficulty never dies at all.
The mechanics are the public-domain part. The names aren't the famous ones, on purpose, and neither is the expression. The playfield is whatever the Grid parameter says rather than a copied layout, colour comes from the palette by role rather than a per-object scheme, and the specific features courts have held to be protected are left out. Stacker is the clearest case: ten mixed polyominoes instead of the seven everyone knows, a run-clear instead of a line-clear, no ghost piece and no next-piece preview.
FFGL has no keyboard and no gamepad. It has parameters, and Resolume will MIDI- or OSC-map any of them. So every control is a parameter: a fader drives the paddle, four pads steer, one pad fires. Rally takes the fader for one paddle and two pads for the other, so two-player works from a single plugin instance. Presses are latched on the edge the moment the host delivers them rather than polled at render time, because a press that starts and ends between two frames is invisible to a poll, and at 50fps that's a 20ms window a drummer hits all the time.
Autoplay is the default and the mode that matters, because nobody's going to hand-play Snake for the length of a show. So the autopilot has to lose, and that's a feature rather than a quality bar: a perfect Snake AI never dies, never resets, and leaves the layer showing the same slowly lengthening snake all night. Skill sets how incompetent it is (tracking error, reaction lag, and a flat chance of ignoring its own survivability analysis), so the games end, restart, and keep the picture changing.
Its second job is pixel mapping. Point Resolume's pixel mapper at a composition running Coinop and the playfield becomes the lights. That's why everything is drawn as cells rather than geometry, why the grid size is a parameter, and why even Drift (the vector game, all continuous rotation and sub-cell drift) is rasterised into the same grid. A one-pixel antialiased vector line sampled onto a 30mm pitch wall lands between the fixtures and vanishes; a chunky rasterised outline survives the trip.
- Fourteen games in one plugin, selected by a dropdown — Snake, Bricks, Marchers, Rally, Drift, Stacker, Chase, Girders, Swarm, Trails, Reflex, Rafters, Duel and Flapper
- Two plugins from one core: a source with its own background, and an effect over the clip
- Bricks From Clip — in the effect, the brick field is the incoming video, so breaking a brick reveals the layer below
- Every control is a host parameter, so all of it MIDI- and OSC-maps: a fader for the paddle, pads to steer and fire
- Autoplay with a Skill control that makes the autopilot lose on purpose, so the layer keeps resetting
- Seeded — the same seed plays the same game, and a run you liked can be got back
- Grid from 12 to 128 cells across, in five aspects, with Fit, Fill or Stretch
- Six palettes, adjustable cell shape and gap, glow, scanlines, and a reactive boost that follows the action
- Universal macOS bundle (Apple Silicon and Intel) and a Windows DLL
Where it stands
Released at v1.0.8, on the 1.0 line. It's had fourteen games since v0.3.0 and nothing since has changed the list. The releases after that were dependency and CI upkeep, a Windows installer that no longer touches the system PATH (v1.0.5; the earlier one could overwrite it), a proper description in the field Resolume shows for a plugin (v1.0.6), the two plugins renamed SW Coinop and SW Coinop Over so the Stoatworks plugins sit together in Resolume's browser (v1.0.7), and a source that no longer fails every frame in a host that never sends it a resize (v1.0.8). One control was renamed along the way: Background Opacity became Background Alpha, which fits in FFGL's sixteen characters. It's tested by two offline harnesses. One drives the real game classes with no graphics API present and makes 268 checks on the simulation state (the snake's length, the ball's angle, that a match actually ends); the other compiles the shaders in a headless GL context and measures what all fourteen draw. The browser demo re-implements every game in JavaScript and is held to the C++ byte for byte. It's never been loaded into Resolume, so try it in your own rig before you trust it in a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead