Draw & Climb
Children colour holds on a printed template of the wall’s interactive area. A teacher photographs the sheet in the app, and the drawn route lights up on the wall in the same positions and colours. The decorative columns either side glow with a gradient that can pick up the drawing’s colours.
The use case specifies no sound for this mode. The messages below are a proposal: enough for SuperCollider to give touches of drawn holds a voice tied to their colour, and to match the ambience to the drawing’s mood. They cost the engine almost nothing and can be ignored until someone designs the audio.
Scanning, mapping the sheet to the wall and choosing colours all happen in the engine and app.
Mode id: draw · Status: draft · Since: 0.2.0 · Spec: Prototype Use Cases, p. 8
Loading
Section titled “Loading”Load this mode with /mode/load and type tags ss:
NetAddr("127.0.0.1", 57120).sendMsg('/mode/load', "draw", "chimes");Init parameters
Section titled “Init parameters”Sent in this exact order, immediately after the mode id.
| # | Name | Type | Range / default | Description |
|---|---|---|---|---|
| 1 | soundSet | s | chimes, marimba, retrodefault chimes | Palette for touches of drawn holds. |
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 | |
|---|---|
| Printed template | Covers only the interactive area; generated from /wall/config’s area. |
| Image scanning and mapping | Turning a photographed sheet into a set of coloured holds. |
| Side gradient | The decorative columns’ colour fill, optionally following the drawing’s palette. |
Messages
Section titled “Messages”/mode/draw/route
A scanned route is now lit on the wall.
ii -
holdCounti int32 0 – 1024 - Holds in the drawn route. 0 means no route yet.
-
colorCounti int32 0 – 8 - Distinct colours the child used.
/mode/draw/route 14 3 NetAddr("127.0.0.1", 57120).sendMsg('/mode/draw/route', 14, 3); osc.Send(Osc.ModeDrawRoute, 14, 3); /mode/draw/palette
The drawing's dominant colour, for matching the ambience.
fff -
huef float32 0.0 – 1.0normalized - Hue, 0.0 red through 1.0 back to red.
-
saturationf float32 0.0 – 1.0normalized - 0.0 grey, 1.0 vivid.
-
brightnessf float32 0.0 – 1.0normalized - 0.0 dark, 1.0 bright.
/mode/draw/palette 0.58 0.7 0.9 NetAddr("127.0.0.1", 57120).sendMsg('/mode/draw/palette', 0.58, 0.7, 0.9); osc.Send(Osc.ModeDrawPalette, 0.58f, 0.7f, 0.9f); The same colour the side gradient shifts toward. Optional — send it only when the gradient interaction is enabled.
/mode/draw/hit
A hold of the drawn route was touched.
iii -
holdIdi int32 hold index · 0 – holdCount−1 - The hold touched.
-
colorIndexi int32 0 – 7 - Which of the drawing's colours it was, 0..colorCount-1. Each colour gets its own voice, so a rainbow route sounds like one.
-
touchedi int32 1 – 1024 - Distinct route holds touched so far, including this one.
/mode/draw/hit 66 1 5 NetAddr("127.0.0.1", 57120).sendMsg('/mode/draw/hit', 66, 1, 5); osc.Send(Osc.ModeDrawHit, 66, 1, 5); /mode/draw/complete
The child has reached the top of their drawn route.
if -
touchedi int32 0 – 1024 - Route holds touched on the way up.
-
elapsedf float32 seconds - Time since the route was lit.
/mode/draw/complete 14 63.0 NetAddr("127.0.0.1", 57120).sendMsg('/mode/draw/complete', 14, 63.0); osc.Send(Osc.ModeDrawComplete, 14, 63.0f); The use case does not define completion; this assumes reaching the route's highest hold. Revisit once someone decides.