overdub

move-anything-snake

samircaus/move-anything-snake · ★ 0

Snake game for Ableton Move as a Schwung overtake module

Built on Schwung

README from GitHub, MIT

Snake for Schwung

A compact Snake game played across Ableton Move's 8×4 pad grid, packaged as a standalone Schwung overtake module.

Controls

Move controlAction
Arrow buttonsStart and steer
Knob 1 (blue)Turn counterclockwise for left, clockwise for right
Knob 2 (magenta)Change the root note through all 12 chromatic notes
Knob 8 (orange)Turn counterclockwise for up, clockwise for down
Track buttons 1–4Select the native Move track and the food-note destination
Step buttons 1–4Choose major, minor, major pentatonic, or blues
Step button 5Toggle single notes and chords (orange when chords are on)
PlayStart, pause, or resume
Jog clickStart, pause, or retry after game over
Shift + Volume Touch + Jog ClickExit through Schwung's host-level escape

The bright green pad is the snake's head, dark green pads are its body, and the red pad is food. Crossing any edge continues from the opposite side. The snake accelerates after every piece of food. The session's best score is shown on the display and resets when the module is unloaded. Arrow and knob turns share the same two-turn input buffer.

Food notes are predictable, not random. In the default Note mode, each pickup plays the next note in a repeating eight-note rise-and-fall motif within one octave of the chosen root. It never drifts into ever-higher octaves. Chord mode plays a repeating four-chord progression. Major and minor use scale-built triads on degrees 1, 4, 5, and 6; pentatonic and blues use three-note voicings from their selected scale. The display shows the selected track, key, and mode; the defaults are Track 1, C major, and Note mode. Track buttons also pass through to Move so a track set to MIDI In → Auto becomes the selected receiving track. Schwung sends food notes on external MIDI cable 2, using channels 1–4 for Track buttons 1–4. If a track has a specific MIDI In channel configured, it must match the channel Snake sends. Single notes last 160 ms, chords 260 ms; all notes are released on exit or before the next food sound.

Snake announces mode, track, scale, root, score, pause, and game-over changes through Schwung's screen reader when it is enabled.

Build and test

Requires Node.js 18 or newer. There are no npm dependencies or native binaries.

npm test
npm run build

The build produces dist/snake-module.tar.gz. Its archive root is the required single snake/ directory containing the module metadata, UI, and game engine.

Install it with Schwung's supported module installer from a Schwung checkout:

./scripts/install.sh install-module ../move-anything-snake/dist/snake-module.tar.gz

Then open Snake from Schwung's Overtake section.

After a GitHub release, the installer can also use the public repository:

./scripts/install.sh install-module-github samircaus/move-anything-snake

Publishing

Tag a version matching src/module.json, then push the tag. GitHub Actions tests and packages the module, attaches snake-module.tar.gz to a public release, and updates release.json on main for Schwung's installer and Manager catalog. The release archive contains only the snake/ module folder.

To appear in Schwung Manager's module catalog, snake also needs an entry in the upstream charlesvestal/schwung module-catalog.json. A public release alone supports direct GitHub installation but does not add the catalog listing.

Development status

The game logic is covered by local unit tests and has been installed for iterative Move testing. Verify track routing, display, LEDs, and input feel on hardware before treating a new release as fully validated.