Skip to content

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

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

NetAddr("127.0.0.1", 57120).sendMsg('/mode/load', "draw", "chimes");

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

#NameTypeRange / defaultDescription
1soundSetschimes, marimba, retro
default chimes
Palette for touches of drawn holds.

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 templateCovers only the interactive area; generated from /wall/config’s area.
Image scanning and mappingTurning a photographed sheet into a set of coloured holds.
Side gradientThe decorative columns’ colour fill, optionally following the drawing’s palette.

/mode/draw/route

engine → sc state since 0.2.0

A scanned route is now lit on the wall.

i holdCount
i colorCount
ii
holdCount i int32 0 – 1024
Holds in the drawn route. 0 means no route yet.
colorCount i int32 0 – 8
Distinct colours the child used.
packet /mode/draw/route 14 3
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/draw/route', 14, 3);
engine (C#) osc.Send(Osc.ModeDrawRoute, 14, 3);

/mode/draw/palette

engine → sc state since 0.2.0

The drawing's dominant colour, for matching the ambience.

f hue
f saturation
f brightness
fff
hue f float32 0.0 – 1.0normalized
Hue, 0.0 red through 1.0 back to red.
saturation f float32 0.0 – 1.0normalized
0.0 grey, 1.0 vivid.
brightness f float32 0.0 – 1.0normalized
0.0 dark, 1.0 bright.
packet /mode/draw/palette 0.58 0.7 0.9
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/draw/palette', 0.58, 0.7, 0.9);
engine (C#) 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

engine → sc event since 0.2.0

A hold of the drawn route was touched.

i holdId
i colorIndex
i touched
iii
holdId i int32 hold index · 0 – holdCount−1
The hold touched.
colorIndex i 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.
touched i int32 1 – 1024
Distinct route holds touched so far, including this one.
packet /mode/draw/hit 66 1 5
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/draw/hit', 66, 1, 5);
engine (C#) osc.Send(Osc.ModeDrawHit, 66, 1, 5);

/mode/draw/complete

engine → sc event since 0.2.0

The child has reached the top of their drawn route.

i touched
f elapsed
if
touched i int32 0 – 1024
Route holds touched on the way up.
elapsed f float32 seconds
Time since the route was lit.
packet /mode/draw/complete 14 63.0
SuperCollider NetAddr("127.0.0.1", 57120).sendMsg('/mode/draw/complete', 14, 63.0);
engine (C#) 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.