Guide A — Cephalopods in Space!

Instructor demo · J Marshall Pittman


What this is

You are an octopus in a spaceship designed especially for you. Attend to all the controls and watch the display to navigate the perils of your journey through space.

Several gauges drift toward failure at once; you run between them keeping everything in the safe band. It ends when you can't keep up. Your score is how long you lasted.

This is the smallest complete game in the collection — seven scripts, one of which is the entire game. It's built to be assembled live in front of a class in about twenty-five minutes, and every field visibly changes how it feels, which makes it a good vehicle for teaching tuning.


Why this one works as a demo

Property Why it helps in class
One script holds the whole loop Students can read MultiTaskStation end to end in five minutes
No player character Skips the entire player/camera/collider setup that eats a first session
No art needed Sliders and buttons. It's playable before anything is drawn
Every number is felt Change one drift rate and the difficulty visibly moves
It always ends There's no win state, so nobody asks "what do I do now?"
Eight arms, eight controls The joke does real pedagogical work — it explains multitasking instantly

Scripts used

MultiTaskStation (Tier 8) · Interactable · InteractionPrompt (Tier 6) · GameManager · AudioManager · SceneLoader · HUDController (Tier 1)


1. Build it

The station

  1. Empty GameObject ShipSystems + the MultiTaskStation component.
  2. Add four Gauges:
# Label Value Drift/sec Safe Min Safe Max Adjust Amount
0 Oxygen 0.55 −0.06 0.35 0.75 0.25
1 Heat 0.50 +0.05 0.25 0.65 0.25
2 Ink Pressure 0.55 −0.08 0.40 0.80 0.30
3 Course 0.50 −0.04 0.40 0.60 0.20
  1. Set the rest:
Field Value
Danger Per Second 0.12
Danger Recovery 0.08
Ramp Per Minute 0.25
Adjust Sfx click
Alarm Sfx alarm
Alarm Interval 2

Note the mix of drift directions

Oxygen falls, Heat rises. Adjust Opposes Drift (on by default) means the adjustment automatically pushes the other way, so both controls work correctly with no extra configuration. Worth pointing out in class — it's a small design choice that removes a whole category of setup error.

Course has the tightest safe band (0.40–0.60) and the slowest drift. That makes it the one that catches people out: it needs attention rarely, so they forget it exists.

The cockpit controls

One per gauge:

  1. Empty GameObject OxygenValve somewhere in the cockpit + a sprite.
  2. Box Collider 2D, Is Trigger ✓.
  3. Interactable — Prompt Text Oxygen, One Shot ✗.
  4. On Interact → MultiTaskStation.Adjust, parameter 0.
  5. Repeat for the other three with parameters 1, 2, 3.

Spread them around the cockpit so the player has to travel between them. The distance between controls is your difficulty.

The octopus

A TopDownMover (Tier 5) on a sprite is the simplest option — no gravity, moves in eight directions, tag Player. Add InteractionPrompt and a prompt prefab (Guide 9 §6 recipe).

Or, for the fastest possible demo: skip the character entirely and wire the four Adjust calls to UI Buttons. Loses the running-around, keeps the multitasking.

The UI

  1. Canvas → four Sliders, one per gauge, labelled. Delete handles, Interactable ✗, Min 0 / Max 1.
  2. A fifth Slider for Danger, coloured red.
  3. A TMP text for the survival time.
  4. Empty child HUD with HUDController (most fields empty).

2. Wire it up

On this object Event Drag in Choose
Each Interactable On Interact ShipSystems MultiTaskStation.Adjust → parameter 0/1/2/3
ShipSystems On Danger Changed DangerBar Slider.value (Dynamic float)
ShipSystems On Alarm AudioManager PlaySFX (string) → alarm
ShipSystems On Run Ended GameManager GameManager.GameOver
Restart Button On Click ShipSystems MultiTaskStation.Restart

The four gauge bars need a small script. OnGaugeChanged sends (int, float) — the index and the value — which doesn't map onto a single Slider. Options: write a four-line relay, or demo with only the Danger bar visible (which works and is arguably tenser). For a live class build, use the Danger bar alone and add the gauge bars afterward.


3. Teaching it live

A rough running order for a class session:

Minutes 0–5 — build the station. Add the component, add one gauge, press Play. Watch the danger bar climb. Nothing else exists yet.

Minutes 5–10 — add one control. An Interactable wired to Adjust(0). Now the player can fight back. This is the moment the loop exists.

Minutes 10–15 — add three more gauges. The game becomes hard. Ask the class what changed — the answer is "attention is now a resource," and that's a design concept they've just felt rather than been told.

Minutes 15–20 — tune it together. Take suggestions. Halve a drift rate; double it. Widen a safe band; narrow it. Change Ramp Per Minute from 0.25 to 1.0 and watch a run end in forty seconds.

Minutes 20–25 — the punchline. Point out that this is a complete game — start, loop, escalation, ending, score — built from one component and four buttons.

The line worth landing

Start with drift rates so slow it's boring, then speed up until you're slightly panicked. That's the right value.

It's true of nearly every number in every game in the class, and it's easier to demonstrate here in ninety seconds than to explain anywhere else.


4. Tuning reference

Change Effect
Drift/sec ↑ that gauge needs attention more often
Safe band narrower less margin for error
Adjust Amount ↓ more presses per fix
Danger Per Second ↑ mistakes are punished faster
Danger Recovery ↑ more forgiving of a brief lapse
Ramp Per Minute ↑ runs end sooner; the whole difficulty curve
Controls further apart travel time becomes the constraint

Ramp Per Minute is the one to demonstrate. At 0.25 a run lasts a few minutes; at 1.0 it lasts under a minute. One float, entirely different game.


5. Extending it

Things to leave as exercises:


6. Common problems

What you see What's wrong
Gauges don't move Drift Per Second is 0
Danger fills instantly Gauges start outside their safe bands — set the starting Value between Min and Max
Danger never fills Every gauge starts safe and drifts slowly. Wait, or raise the drift
Adjusting moves the wrong way Untick Adjust Opposes Drift on that gauge
Interacting does nothing InteractionPrompt missing on the player, or Interact action missing
Wrong gauge adjusts The Adjust parameter doesn't match the gauge's index
Run never ends Danger Recovery is higher than Danger Per Second
Danger bar doesn't move Wired to static value rather than Dynamic float

7. Checklist