Arcade
Short, replayable missions with a clear objective, strong sound and light, and a simple story — the example is Space Station Repair: an alarm, a hull breach, a ladder to climb, a leaking pipe to hold shut while hot pipes around it burn.
A game is 4–5 missions of rising difficulty. Voice lines, alarms and ambience beds are content, played with /sample/play. What this mode adds is the gameplay SuperCollider needs to react to, and the acoustic environment — the switch to muffled breathing and radio voices when the player “steps outside” is processing, not a different recording.
Mode id: arcade · Status: draft · Since: 0.2.0 · Spec: Prototype Use Cases, pp. 11–12
Loading
Section titled “Loading”Load this mode with /mode/load and type tags ssi:
NetAddr("127.0.0.1", 57120).sendMsg('/mode/load', "arcade", "space-station", 0);Init parameters
Section titled “Init parameters”Sent in this exact order, immediately after the mode id.
| # | Name | Type | Range / default | Description |
|---|---|---|---|---|
| 1 | gameId | s | — | The arcade game, e.g. “space-station”. For logs and processing presets. |
| 2 | startMission | i | 0 – 9 default 0 | Mission to begin at, so a class can resume where it stopped. |
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 | |
|---|---|
| Mission scripts | Briefings, objectives, hazards and the order of voice lines. |
| Visual effects | Star-field lighting, the descending ladder, the pulsing pipe, red hot-pipe holds. |
Messages
Section titled “Messages”/mode/arcade/mission/mode/arcade/environment/mode/arcade/objective/mode/arcade/objective/progress/mode/arcade/objective/complete/mode/arcade/hazard/mode/arcade/complete/mode/arcade/mission
A mission has started.
iis -
missionIndexi int32 0 – 9 - Zero-based.
-
missionCounti int32 1 – 10 - Missions in the game.
-
missionIds string - e.g. "seal-the-leak". For logs and processing presets.
/mode/arcade/mission 0 5 seal-the-leak NetAddr("127.0.0.1", 57120).sendMsg('/mode/arcade/mission', 0, 5, "seal-the-leak"); osc.Send(Osc.ModeArcadeMission, 0, 5, "seal-the-leak"); SuperCollider raises the music intensity with missionIndex / missionCount.
/mode/arcade/environment
The acoustic space the player is in.
s -
environments string "normal" | "alarm" | "radio" | "helmet" - normal — dry. alarm — a pulsing duck on everything, to sit an alarm on top. radio — voice band-limited and crackled. helmet — muffled outside world, close breathing, radio voice: the "stepped outside" sound.
/mode/arcade/environment helmet NetAddr("127.0.0.1", 57120).sendMsg('/mode/arcade/environment', "helmet"); osc.Send(Osc.ModeArcadeEnvironment, "helmet"); Processing applied to what is already playing. The breathing bed itself is a looped sample the engine starts.
/mode/arcade/objective
The current objective — a hold to reach and keep hold of.
ifs -
holdIdi int32 hold index · 0 – holdCount−1 - The target hold, e.g. the damaged pipe.
-
holdTimef float32 0.0 – 60.0seconds - How long it must be held. 0.0 means touching it is enough.
-
keys string - Sample key of the objective's sound, e.g. "space/leak-hiss". Looped by SuperCollider from its hold's position and faded as progress rises.
/mode/arcade/objective 196 5.0 space/leak-hiss NetAddr("127.0.0.1", 57120).sendMsg('/mode/arcade/objective', 196, 5.0, "space/leak-hiss"); osc.Send(Osc.ModeArcadeObjective, 196, 5.0f, "space/leak-hiss"); /mode/arcade/objective/progress
How far through the objective the player is.
f -
progressf float32 0.0 – 1.0normalized - Fraction of holdTime held so far. Falls back if the player lets go, if the game says so.
/mode/arcade/objective/progress 0.45 NetAddr("127.0.0.1", 57120).sendMsg('/mode/arcade/objective/progress', 0.45); osc.Send(Osc.ModeArcadeObjectiveProgress, 0.45f); Sent only while the objective hold is touched, and once with the final value when it is released. The hiss fades as this rises — absolute, so a dropped frame is invisible.
/mode/arcade/objective/complete
The objective was achieved.
i -
missionIndexi int32 0 – 9 - The mission whose objective this was.
/mode/arcade/objective/complete 0 NetAddr("127.0.0.1", 57120).sendMsg('/mode/arcade/objective/complete', 0); osc.Send(Osc.ModeArcadeObjectiveComplete, 0); Stops the objective sound fully and plays the reward cue. The engine then plays the "climb back down" instructions and the next briefing.
/mode/arcade/hazard
The player touched a hazard.
is -
holdIdi int32 hold index · 0 – holdCount−1 - The hazard hold, e.g. a hot pipe.
-
keys string - Sample key of the hazard sound, e.g. "space/sizzle".
/mode/arcade/hazard 175 space/sizzle NetAddr("127.0.0.1", 57120).sendMsg('/mode/arcade/hazard', 175, "space/sizzle"); osc.Send(Osc.ModeArcadeHazard, 175, "space/sizzle"); Played from the hazard's position. The warning narration that follows is a separate /sample/play on the voice bus.
/mode/arcade/complete
The game is over.
iif -
missionsCompletedi int32 0 – 10 - Missions finished.
-
missionCounti int32 1 – 10 - Missions in the game.
-
elapsedf float32 seconds - Total play time.
/mode/arcade/complete 5 5 412.0 NetAddr("127.0.0.1", 57120).sendMsg('/mode/arcade/complete', 5, 5, 412.0); osc.Send(Osc.ModeArcadeComplete, 5, 5, 412.0f);