Serpentine Sequencer¶
A snake sequencer game for the NeoTrellis / Monome-compatible 16x8 RGB grid. The snake eats fruit to collect notes into an arpeggiator pool. Each fruit type triggers a different musical event on collection.
- Author: jonwaterschoot (jonwtr)
- Version: v1.3.0-dev
- Forum: (link pending)
Usage¶
Navigate the snake with the D-PAD (bottom-right corner of the grid). Hold or double-tap ALT (bottom-left) to open the Settings overlay without stopping the sequencer.
The snake eats coloured fruit. Each fruit type adds a note to the arpeggiator pool and triggers a musical side-effect. The sequencer runs continuously — ALT mode is a live overlay.
Controls¶
Global (always active)¶
| Location | Label | Description |
|---|---|---|
| x=1, y=8 | ALT | Momentary hold opens Settings; double-tap = sticky toggle; sequencer keeps running |
| x=2, y=8 | Play/Stop | Green = running, red = stopped; stop sends MIDI panic (all notes off) |
| x=15, y=7 | D-PAD UP | Move snake up |
| x=14, y=8 | D-PAD LEFT | Move snake left |
| x=15, y=8 | D-PAD DOWN | Move snake down |
| x=16, y=8 | D-PAD RIGHT | Move snake right |
Settings¶
Open by holding or double-tapping ALT (x=1, y=8). The sequencer continues running.
Row 1 — Spawner Engine¶
| Location | Description |
|---|---|
| x=1..8, y=1 | Spawn Quantity — slider, each step = 2 fruits, max 16 on grid simultaneously |
| x=11..16, y=1 | Fruit Type Toggles — enable/disable each fruit colour independently (see Fruit Types below) |
Row 2 — Timing & Pool¶
| Location | Description |
|---|---|
| x=1..8, y=2 | Accent Interval — slider sets accent beat spacing (1–8 steps); lit LEDs show active beats in 8-step window |
| x=9..16, y=2 | Arp Pool Max Capacity — sets maximum number of notes the pool can hold (1–8) |
Row 3 — Playback Controls¶
| Location | Description |
|---|---|
| x=1, y=3 | Autopilot — dim = manual control; bright green = auto (BFS pathfinding to nearest fruit) |
| x=3, y=3 | Arp Playback Order — cycles ORD (FIFO) / RND (random) / UP (low→high) / DWN (high→low) |
| x=5, y=3 | Arp On/Off — green = arp plays notes; dim red = eat notes into pool only, no MIDI output |
| x=7, y=3 | Humanize — cyan = on (±velocity + duration drift applied); dim = off; display shows HU1 / HU0 |
| x=3, y=8 | Base Octave (green) — cycles OC1–OC6, shifts all MIDI note output up/down by octave |
| x=4, y=8 | Octave Range (blue) — cycles RA1–RA6, spreads arp notes across multiple octaves |
| x=10, y=3 | BPM −10 |
| x=11, y=3 | BPM −1 |
| x=12, y=3 | BPM +1 |
| x=13, y=3 | BPM +10 |
| x=15, y=3 | Brightness — steps through 3 LED brightness limits (4 → 8 → 12) |
| x=16, y=3 | Monochrome Tint — cycles through 5 cinematic tint overlays + full colour off |
Row 4 — Scale System¶
| Location | Description |
|---|---|
| x=1, y=4 | MAJ — Major scale |
| x=2, y=4 | MIN — Minor scale |
| x=3, y=4 | PMA — Pentatonic Major |
| x=4, y=4 | PMI — Pentatonic Minor |
| x=5, y=4 | DOR — Dorian mode |
| x=6, y=4 | LYD — Lydian mode |
| x=7, y=4 | CUS — Custom manual scale (use keyboard rows to set active intervals) |
| x=8..16, y=4 | LED Readout — 3×5 block font displays current BPM, scale name, and arp mode |
Rows 6–7 — Root Note Keyboard¶
Used to lock the global root note, or to set custom scale intervals when CUS is active.
| Row | Keys |
|---|---|
| Row 6 — black keys | x=1 (C#), x=2 (D#), x=4 (F#), x=5 (G#), x=6 (A#) |
| Row 7 — white keys | x=1 (C), x=2 (D), x=3 (E), x=4 (F), x=5 (G), x=6 (A), x=7 (B) |
Fruit Types¶
Each fruit is toggled on/off via x=11–16, y=1 in Settings. Tapping a fruit toggle also plays a demo sound.
| Toggle | Colour | Effect on eat | Demo sound |
|---|---|---|---|
| x=11, y=1 | Red | Shrinks tail by 1; adds note to pool | High sharp single note |
| x=12, y=1 | Blue | Grows tail by 1; adds note to pool | Two-note fifth |
| x=13, y=1 | Yellow | Halves tempo for 16 ticks; adds note | Accent burst |
| x=14, y=1 | Cyan | Plays diatonic triad (3 stages per position) | Triad demo |
| x=15, y=1 | Orange | Adds note with 33% per-note trigger probability; grows tail | Soft single note |
| x=16, y=1 | Purple | Spawns decaying echo bounces; grows tail | Echo bounce demo |
Notes¶
- The sequencer never stops when entering/exiting Settings — ALT is a live overlay
- MIDI panic (all notes off) fires automatically when Play/Stop is toggled to stopped
- BPM can be set as low as 1; no upper limit enforced in script
- Monochrome mode tints are cinematic presets, not user-configurable per-tint
- Memory on the Pico is tight — avoid adding new
elseifdisplay branches or new string constants to the alt display chain as these can cause freezes (root cause unknown, possibly Lua heap/string-table interaction on Pico)
Changelog¶
See CHANGELOG.md for version history.