Skip to content

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

Load this mode with /mode/load and type tags sisss:

NetAddr("127.0.0.1", 57120).sendMsg('/mode/load', "match", 6, "split", "freestyle", "chimes");

Sent in this exact order, immediately after the mode id.

#NameTypeRange / defaultDescription
1pairCounti2 – 12
default 6
Pairs on the wall at the start.
2complexityssingle, split, multi
default split
Pattern complexity — single colour, two-colour split, or multi-segment. SuperCollider uses it to decide how distinct the pattern tones need to be.
3variantsfreestyle, guided
default freestyle
Who picks the first hold of each pair — the player, or the wall.
4soundSetschimes, marimba, retro
default chimes
Palette for pattern tones and feedback.

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 coloursThe colour pairs themselves, and where the pairs are placed.
Pulse animationThe highlighted-selection animation.

/mode/match/target

engine → sc event since 0.2.0

The wall has picked the hold the player must find a partner for.

i holdId
i patternIndex
ii
holdId i int32 hold index · 0 – holdCount−1
The highlighted hold.
patternIndex i int32 0 – 11
Its pattern, 0..pairCount-1.
packet /mode/match/target 128 4
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/target', 128, 4);
engine (C#) osc.Send(Osc.ModeMatchTarget, 128, 4);

Guided variant only.

/mode/match/select

engine → sc event since 0.2.0

The player pressed a first hold and is now looking for its partner.

i holdId
i patternIndex
ii
holdId i int32 hold index · 0 – holdCount−1
The hold now pulsing as the active selection.
patternIndex i int32 0 – 11
Its pattern.
packet /mode/match/select 128 4
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/select', 128, 4);
engine (C#) osc.Send(Osc.ModeMatchSelect, 128, 4);

Freestyle variant only. Selecting a different hold replaces the selection.

/mode/match/pair

engine → sc event since 0.2.0

A matching pair was found and leaves the wall.

i holdA
i holdB
i patternIndex
i pairsFound
i pairCount
iiiii
holdA i int32 hold index · 0 – holdCount−1
The first hold of the pair.
holdB i int32 hold index · 0 – holdCount−1
The second hold of the pair.
patternIndex i int32 0 – 11
The pattern they share.
pairsFound i int32 1 – 12
Pairs cleared so far, including this one.
pairCount i int32 2 – 12
Pairs in the game.
packet /mode/match/pair 128 57 4 3 6
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/pair', 128, 57, 4, 3, 6);
engine (C#) osc.Send(Osc.ModeMatchPair, 128, 57, 4, 3, 6);

/mode/match/wrong

engine → sc event since 0.2.0

The player pressed a hold that does not match the selection.

i holdId
i patternIndex
i expectedPattern
iii
holdId i int32 hold index · 0 – holdCount−1
The hold pressed.
patternIndex i int32 0 – 11
The pattern of the hold pressed.
expectedPattern i int32 0 – 11
The pattern that was being looked for.
packet /mode/match/wrong 90 2 4
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/wrong', 90, 2, 4);
engine (C#) 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

engine → sc event since 0.2.0

Every pair has been found; the wall is empty.

i pairCount
f elapsed
if
pairCount i int32 2 – 12
Pairs found.
elapsed f float32 seconds
Time since the game started.
packet /mode/match/clear 6 142.5
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/match/clear', 6, 142.5);
engine (C#) osc.Send(Osc.ModeMatchClear, 6, 142.5f);