seqtris
seqtris · gamesAn 8x8 Tetris played on a Novation Launchpad and wired into the rack as a clocked note source. The pad grid IS the well and the right-hand scene column is the controller (top to bottom: reset board, two dead buttons, drop piece, rotate left, rotate right, move left, move right); the card mirrors the same picture and the same eight buttons so it plays without hardware. CONNECT grants Web MIDI and lists the attached Launchpads. The piece set is the normal seven with two shapes cut down for a short well — the straight line is a 2-cell domino and the two L pieces are 3-cell corners, so nothing is ever taller than three rows. Each piece carries one TRACKED SQUARE, fixed at spawn as the leftmost cell of its top row and immutable through rotation; its column picks the octave and its row picks a degree of a C major scale running DOWNWARD from the top row, so the leftmost column reaches down to C0 and the rightmost up to C8. PIECE (poly) fires that note on every move and on every spawn; a hard drop instead sends every row it falls through at once under one held gate — a tie. SPAWN pulses per new piece, LINE pulses once per cleared row. Gravity is counted in CLOCK PULSES (one row every GRAV pulses), and each cleared line steps GRAV down to the next whole number about ten percent faster, so the game accelerates without ever leaving the clock grid. QUANT latches button presses to the next clock pulse (default) or plays them free. BOARD (poly) is declared and silent — stubbed for now.
the faceplate
inputs
| id | cable | what it does |
|---|---|---|
clock | gate | The game clock. Every rising edge is one pulse; the piece falls one row every GRAV pulses, so the patch tempo is the game tempo. Because gravity is a whole number of pulses, a speed-up from a cleared line still lands every fall and every spawn on a clock edge. A TIMELORDE 8x output at 90 bpm with GRAV at 8 is one row per beat, which is a comfortable pace to actually play at. With nothing patched here the piece never falls on its own and the buttons play free. gate / trigger; trigger — fires once per rising edge |
outputs
| id | cable | what it does |
|---|---|---|
piece | polyPitchGate | The note the current piece is sounding, as a poly note cable. It fires afresh every time the piece moves — gravity, a sideways move, a rotation — and once more each time a piece spawns, so the top row (a C) is always heard. Pitch comes from the tracked square: column picks the octave, row picks a descending C major scale degree. A hard drop is the exception: every row the piece falls through arrives together on separate voices under a single gate that is held for one gravity step, so the drop reads as one tied chord rather than a burst of retriggers. poly pitch+gate bus; 10-channel poly bus (5 pitch + 5 gate lanes) |
board | polyPitchGate | Reserved for a future reading of the LANDED stack. It is declared so a patch can be built around it now, and it is silent — no voice on it ever gates. Patch PIECE for the notes. poly pitch+gate bus; 10-channel poly bus (5 pitch + 5 gate lanes) |
line | gate | Fires a short pulse each time a completed row is cleared and the stack drops. A double clear fires twice, 20 ms apart, so a counter or a drum sees each row. It does NOT fire on a stack-out — nothing was cleared there. gate / trigger; trigger — fires once per rising edge |
spawn | gate | Fires a short pulse the moment a new piece appears at the top of the well, including the fresh piece that follows a stack-out. Patch it at a drum or an envelope to hear the shape of the game. gate / trigger; trigger — fires once per rising edge |
params
| id | label | range | default | curve |
|---|---|---|---|---|
gravity | grav | 1..48pulses | — | discrete |
quantize | quant | 0..1 | 1 | discrete |
controls
| control | what it does |
|---|---|
| grav | GRAV, in clock pulses per row (1..48, default 8). This is the LEVEL-ZERO speed; every cleared line steps the working divisor down to the next whole number roughly ten percent faster, ending at 1 (a row per pulse). Because it is a whole number of pulses, the game loop is always a proper divisor of the incoming clock. From the default of 8 the ladder is 8, 7, 6, 5, 4, 3, 2, 1 — eight levels, though the steps near the end are much bigger than ten percent. Feed a finer clock (24 or 48 pulses per beat) and set GRAV to match for rungs that are actually ten percent apart. Changing GRAV re-derives the current speed from the lines you have already cleared rather than resetting them. |
| quant | QUANT decides when a button press takes effect. On CLOCK (the default) a press is held until the next clock pulse, so every note the module emits lands on the grid — moves, rotations and drops included. On FREE a press acts the instant it arrives, which feels like a video game and sounds unquantized. With nothing patched into CLOCK, presses always act immediately whatever this says. |
source
seqtris.ts on GitHub.