Stoatworks Labs

Coinop

Fourteen arcade games as a Resolume plugin

Stablev1.0.0Plugin & ModuleC++ / GLSL
Coinop — Fourteen arcade games as a Resolume plugin
Four of the thirteen games, rendered by the plugin's own offline harness — the real autopilot playing through the real cell shader, not a Resolume screen capture. Clockwise from top left: Chase on Amber, Trails on Ice, Girders on Fire, and Stacker on Candy.

What it does

Fourteen arcade games that run inside a Resolume composition, for Arena and Avenue. It ships as two plugins rather than one, because FFGL resolves a single 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 sits on. The game itself is a dropdown, not a separate plugin — fourteen games do not need twenty-eight entries in the effect list, and a fifteenth will not 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 — the way it should, because that acceleration 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 are going. Girders is a climb up floors that hazards cascade back down. Swarm is a formation that attackers peel out of, dive from, and rejoin. Trails is riders who never stop, leaving walls. Reflex is a prompt, a closing window, and the right button or nothing. Rafters is hitting the floor from underneath to flip what is 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 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 are deliberately not the famous ones, 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, which makes two-player work 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 is a 20ms window a drummer hits constantly.

Autoplay is the default and the mode that matters, because nobody hand-plays Snake for the length of a show. That makes 'the autopilot has to lose' 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 governs deliberate incompetence — tracking error, reaction lag, and a flat chance of ignoring its own survivability analysis — so the games end, restart, and keep the picture changing.

The second job is pixel mapping. Point Resolume's pixel mapper at a composition running Coinop and the playfield becomes the lights. That is 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 fixtures and disappears; a chunky rasterised outline survives the trip.

  • Thirteen games in one plugin, selected by a dropdown — Snake, Bricks, Marchers, Rally, Drift, Stacker, Chase, Girders, Swarm, Trails, Reflex, Rafters and Duel
  • 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 v0.3.0, which brought it to fourteen games. Verified by two offline harnesses: one drives the real game classes with no graphics API present and asserts on simulation state — the snake's length, the ball's angle, that a match actually ends — across 268 checks, and a second 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 has never been loaded into Resolume, so check it in your own rig before trusting it in a show.

Watch it running

Coinop video thumbnail

Nothing loads from YouTube until you press play.Watch it there instead