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
Loading
Section titled “Loading”Load this mode with /mode/load and type tags siiss:
NetAddr("127.0.0.1", 57120).sendMsg('/mode/load', "mirror", 2, 0, "static", "chimes");Init parameters
Section titled “Init parameters”Sent in this exact order, immediately after the mode id.
| # | Name | Type | Range / default | Description |
|---|---|---|---|---|
| 1 | zoneCount | i | 2 – 4 default 2 | Zones, including the Leader’s. |
| 2 | leaderZone | i | 0 – 3 default 0 | Which zone leads. Must be less than zoneCount. |
| 3 | display | s | static, replaydefault static | static — the whole route stays lit once finalised. replay — Followers reveal it one hold at a time, in the order it was created. |
| 4 | soundSet | s | chimes, marimba, retrodefault chimes | Palette for hold and completion cues. |
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 | |
|---|---|
| Zone colours | Each zone’s unique LED colour. |
| Finish Hold positions | One per zone, at the top; the engine places and lights them. |
| Route mirroring | Mapping a Leader hold to the same position in each Follower zone. |
Messages
Section titled “Messages”/mode/mirror/phase/mode/mirror/record/mode/mirror/finalize/mode/mirror/reveal/mode/mirror/progress/mode/mirror/finish/mode/mirror/phase
Which stage of the game the wall is in.
s -
phases 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.
/mode/mirror/phase recording NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/phase', "recording"); osc.Send(Osc.ModeMirrorPhase, "recording"); /mode/mirror/record
The Leader has added a hold to the route.
ii -
stepIndexi int32 0 – 1023 - Position in the route, zero-based.
-
holdIdi int32 hold index · 0 – holdCount−1 - The Leader's hold. Its mirrors are lit by the engine.
/mode/mirror/record 3 87 NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/record', 3, 87); 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
The Leader pressed their Finish Hold; the route is locked.
i -
routeLengthi int32 0 – 1024 - Holds in the finished route.
/mode/mirror/finalize 9 NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/finalize', 9); osc.Send(Osc.ModeMirrorFinalize, 9); /mode/mirror/reveal
Replay display has revealed the next hold in a Follower zone.
iii -
zonei int32 zone index · 0 – zoneCount−1 - The Follower zone.
-
stepIndexi int32 0 – 1023 - Which step of the route is now lit.
-
holdIdi int32 hold index · 0 – holdCount−1 - The hold that lit up.
/mode/mirror/reveal 1 2 91 NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/reveal', 1, 2, 91); osc.Send(Osc.ModeMirrorReveal, 1, 2, 91); Replay display only. In static display the whole route lights at once.
/mode/mirror/progress
A Follower pressed a hold of the route.
iiii -
zonei int32 zone index · 0 – zoneCount−1 - The Follower zone.
-
stepIndexi int32 0 – 1023 - Which step of the route it was.
-
holdIdi int32 hold index · 0 – holdCount−1 - The hold pressed.
-
routeLengthi int32 0 – 1024 - Holds in the route, so the cue can rise toward the finish.
/mode/mirror/progress 1 2 91 9 NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/progress', 1, 2, 91, 9); osc.Send(Osc.ModeMirrorProgress, 1, 2, 91, 9); Unlit holds are allowed and produce nothing here — only route holds are tracked.
/mode/mirror/finish
A Follower reached their Finish Hold.
if -
zonei int32 zone index · 0 – zoneCount−1 - The Follower zone that finished.
-
elapsedf float32 seconds - Time since the route was finalised.
/mode/mirror/finish 1 47.3 NetAddr("127.0.0.1", 57120).sendMsg('/mode/mirror/finish', 1, 47.3); osc.Send(Osc.ModeMirrorFinish, 1, 47.3f); Plays that zone's completion cue alongside its completion animation.