Skip to content

Mirror, Mirror on the Wall

The wall splits into equal zones: one Leader, the rest Followers. The Leader climbs and invents a route; every hold they press lights up in their zone and at the same position in every Follower zone. Pressing their Finish Hold locks the route. The Followers then climb it to their own Finish Hold.

In Replay display the route is revealed to Followers one hold at a time, in the order it was created. Followers may use unlit holds freely — the game never penalises them, so there is no mistake message here by design.

Mode id: mirror · Status: draft · Since: 0.2.0 · Spec: Prototype Use Cases, pp. 2–3

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

NetAddr("127.0.0.1", 57120).sendMsg('/mode/load', "mirror", 2, 0, "static", "chimes");

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

#NameTypeRange / defaultDescription
1zoneCounti2 – 4
default 2
Zones, including the Leader’s.
2leaderZonei0 – 3
default 0
Which zone leads. Must be less than zoneCount.
3displaysstatic, replay
default static
static — the whole route stays lit once finalised. replay — Followers reveal it one hold at a time, in the order it was created.
4soundSetschimes, marimba, retro
default chimes
Palette for hold and completion cues.

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
Zone coloursEach zone’s unique LED colour.
Finish Hold positionsOne per zone, at the top; the engine places and lights them.
Route mirroringMapping a Leader hold to the same position in each Follower zone.

/mode/mirror/phase

engine → sc state since 0.2.0

Which stage of the game the wall is in.

s phase
s
phase s string "recording" | "following" | "complete"
recording — the Leader is building the route. following — the route is locked and Followers are climbing. complete — every Follower has finished.
packet /mode/mirror/phase recording
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/phase', "recording");
engine (C#) osc.Send(Osc.ModeMirrorPhase, "recording");

/mode/mirror/record

engine → sc event since 0.2.0

The Leader has added a hold to the route.

i stepIndex
i holdId
ii
stepIndex i int32 0 – 1023
Position in the route, zero-based.
holdId i int32 hold index · 0 – holdCount−1
The Leader's hold. Its mirrors are lit by the engine.
packet /mode/mirror/record 3 87
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/record', 3, 87);
engine (C#) osc.Send(Osc.ModeMirrorRecord, 3, 87);

Plays a cue in the Leader's zone and a quieter echo in every Follower zone.

/mode/mirror/finalize

engine → sc event since 0.2.0

The Leader pressed their Finish Hold; the route is locked.

i routeLength
i
routeLength i int32 0 – 1024
Holds in the finished route.
packet /mode/mirror/finalize 9
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/finalize', 9);
engine (C#) osc.Send(Osc.ModeMirrorFinalize, 9);

/mode/mirror/reveal

engine → sc event since 0.2.0

Replay display has revealed the next hold in a Follower zone.

i zone
i stepIndex
i holdId
iii
zone i int32 zone index · 0 – zoneCount−1
The Follower zone.
stepIndex i int32 0 – 1023
Which step of the route is now lit.
holdId i int32 hold index · 0 – holdCount−1
The hold that lit up.
packet /mode/mirror/reveal 1 2 91
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/reveal', 1, 2, 91);
engine (C#) osc.Send(Osc.ModeMirrorReveal, 1, 2, 91);

Replay display only. In static display the whole route lights at once.

/mode/mirror/progress

engine → sc event since 0.2.0

A Follower pressed a hold of the route.

i zone
i stepIndex
i holdId
i routeLength
iiii
zone i int32 zone index · 0 – zoneCount−1
The Follower zone.
stepIndex i int32 0 – 1023
Which step of the route it was.
holdId i int32 hold index · 0 – holdCount−1
The hold pressed.
routeLength i int32 0 – 1024
Holds in the route, so the cue can rise toward the finish.
packet /mode/mirror/progress 1 2 91 9
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/progress', 1, 2, 91, 9);
engine (C#) osc.Send(Osc.ModeMirrorProgress, 1, 2, 91, 9);

Unlit holds are allowed and produce nothing here — only route holds are tracked.

/mode/mirror/finish

engine → sc event since 0.2.0

A Follower reached their Finish Hold.

i zone
f elapsed
if
zone i int32 zone index · 0 – zoneCount−1
The Follower zone that finished.
elapsed f float32 seconds
Time since the route was finalised.
packet /mode/mirror/finish 1 47.3
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/finish', 1, 47.3);
engine (C#) osc.Send(Osc.ModeMirrorFinish, 1, 47.3f);

Plays that zone's completion cue alongside its completion animation.