Find the Match
Holds light up across the wall in two-colour patterns. Every pattern appears exactly twice; players find and press both holds of a pair to clear it. The game ends when the wall is empty.
In Freestyle, a player picks any hold and then hunts for its partner. In Guided, the wall picks the hold and the player hunts for its partner.
Each pattern has an index, and SuperCollider gives each index its own tone — so the pair shares a sound as well as a look, which is a second route to the answer for a child who finds the colours hard to tell apart.
Mode id: match · Status: draft · Since: 0.2.0 · Spec: Prototype Use Cases, p. 4
Loading
Section titled “Loading”Load this mode with /mode/load and type tags sisss:
NetAddr("127.0.0.1", 57120).sendMsg('/mode/load', "match", 6, "split", "freestyle", "chimes");Init parameters
Section titled “Init parameters”Sent in this exact order, immediately after the mode id.
| # | Name | Type | Range / default | Description |
|---|---|---|---|---|
| 1 | pairCount | i | 2 – 12 default 6 | Pairs on the wall at the start. |
| 2 | complexity | s | single, split, multidefault split | Pattern complexity — single colour, two-colour split, or multi-segment. SuperCollider uses it to decide how distinct the pattern tones need to be. |
| 3 | variant | s | freestyle, guideddefault freestyle | Who picks the first hold of each pair — the player, or the wall. |
| 4 | soundSet | s | chimes, marimba, retrodefault chimes | Palette for pattern tones and feedback. |
Configured in the engine
Section titled “Configured in the engine”Settings from the use case that never cross the wire. The engine applies them; SuperCollider does not need them, so they are not in the protocol.
| Setting | |
|---|---|
| Pattern colours | The colour pairs themselves, and where the pairs are placed. |
| Pulse animation | The highlighted-selection animation. |
Messages
Section titled “Messages”/mode/match/target
The wall has picked the hold the player must find a partner for.
ii -
holdIdi int32 hold index · 0 – holdCount−1 - The highlighted hold.
-
patternIndexi int32 0 – 11 - Its pattern, 0..pairCount-1.
/mode/match/target 128 4 NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/target', 128, 4); osc.Send(Osc.ModeMatchTarget, 128, 4); Guided variant only.
/mode/match/select
The player pressed a first hold and is now looking for its partner.
ii -
holdIdi int32 hold index · 0 – holdCount−1 - The hold now pulsing as the active selection.
-
patternIndexi int32 0 – 11 - Its pattern.
/mode/match/select 128 4 NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/select', 128, 4); osc.Send(Osc.ModeMatchSelect, 128, 4); Freestyle variant only. Selecting a different hold replaces the selection.
/mode/match/pair
A matching pair was found and leaves the wall.
iiiii -
holdAi int32 hold index · 0 – holdCount−1 - The first hold of the pair.
-
holdBi int32 hold index · 0 – holdCount−1 - The second hold of the pair.
-
patternIndexi int32 0 – 11 - The pattern they share.
-
pairsFoundi int32 1 – 12 - Pairs cleared so far, including this one.
-
pairCounti int32 2 – 12 - Pairs in the game.
/mode/match/pair 128 57 4 3 6 NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/pair', 128, 57, 4, 3, 6); osc.Send(Osc.ModeMatchPair, 128, 57, 4, 3, 6); /mode/match/wrong
The player pressed a hold that does not match the selection.
iii -
holdIdi int32 hold index · 0 – holdCount−1 - The hold pressed.
-
patternIndexi int32 0 – 11 - The pattern of the hold pressed.
-
expectedPatterni int32 0 – 11 - The pattern that was being looked for.
/mode/match/wrong 90 2 4 NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/wrong', 90, 2, 4); osc.Send(Osc.ModeMatchWrong, 90, 2, 4); Plays a gentle "not that one", then the expected pattern's tone as a hint. Never a buzzer.
/mode/match/clear
Every pair has been found; the wall is empty.
if -
pairCounti int32 2 – 12 - Pairs found.
-
elapsedf float32 seconds - Time since the game started.
/mode/match/clear 6 142.5 NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/clear', 6, 142.5); osc.Send(Osc.ModeMatchClear, 6, 142.5f);