A cutscene that opens on your world, not a stock planet

Shot five of the Orbit2D intro: the pod down on the real terrain of the chosen seed with its lamp lit and two suits stepping out

Written by

in

Until this week the game started by simply existing. You pressed Land on Verge, the
title screen went away, and there you were on a frozen surface with two crew and a task queue —
no idea who those two people were, why they were on that rock, or what the thing on the ridge had
to do with anything. The story was all in the game: nine objectives, nine recoverable log
entries, an ending that reads the colony back. None of it was at the front, where a new player
decides in about six seconds whether this is worth their afternoon.

So there is a cutscene now. Six shots, about forty seconds, and then you are digging.

Shot one of the Orbit2D intro: the lander on its relay course with the planet's limb below and rings of the carrier tone rising to meet it

It was already written

The temptation with an intro is to invent a bigger story for it. I did not need to: the first
log fragment in the game, the one the crew wrote before landing, already says exactly what
happened, and it is more interesting than a crash.

For the record, because someone will ask: the descent was not a failure. We were
three weeks out from the relay when the carrier tone came up through the hull — steady, patterned,
coming from the surface of a world that no survey has ever cleared for landing. Command said hold
course. I put us down.

That is the cutscene. The tone arriving through the hull, the pattern that is too tidy to be
geology, the order that said do not descend, and one commander deciding to ignore it. Every line
of narration is taken from that fragment, so the intro cannot drift away from the story the rest
of the game tells — and a player who reads the log twenty hours later finds the words they already
heard on the way down.

The signal shot is the one I kept fiddling with. The tone in this game has a specific rhythm —
fifty-one seconds of pressure, nine of silence — and it turns up in the geyser fragment, in the
ending, and in what the monolith finally does with it. So the oscilloscope counts. It really is
51 on and 9 off, with the counter running, because a shape that looks like a signal is
worth much less than one the rest of the game agrees with.

Shot two of the Orbit2D intro: an oscilloscope trace of the carrier tone with a counter reading 37 of 51 seconds

The last three shots are your world, not a stock planet

This is the part I would defend hardest. There are twenty seeded worlds, and the intro plays
after the one you picked has been generated — so the entry burn comes down onto that
world’s real height map, the touchdown sits on the actual cleared landing site the generator chose
for your pod, and the sky, haze and weather are that region’s. Land on the Fungal Basin and the
air has spores drifting in it. Land on Ash Flats and dust blows sideways past the hull. The
closing card reads the world number, the seed, the region, the temperature you are about to stand
in, and how much rock is underneath you.

Shot five of the Orbit2D intro: the pod down on the real terrain of the chosen seed with its lamp lit and two suits stepping out

Nothing in those frames is an illustration of the game. They are the game, at a different
camera height, which is why they cost about seven kilobytes of code and no assets at all. The
whole file is still one HTML document.

Shot six of the Orbit2D intro: a card reading world 1, seed 20260806, VERGE, Ash Flats, minus 12 degrees, 36 m of rock below you

Rules I set for it before writing a line

Cutscenes are the most easily hated thing in games, and always for the same reasons. So:

  • It plays on a fresh landing only. Continue an existing base and you go
    straight into the hole. Nobody watches the descent on their fortieth visit.
  • Skip is on screen from the first frame, top right, plus Escape. Tap, click,
    space or the right arrow advances a shot for people who want to read at their own speed.
  • It is replayable — “Watch the descent again” sits in the signal log next to
    the fragments, so skipping is not a permanent decision.
  • The world is frozen while it runs. The main loop returns early, so nobody
    loses forty seconds of warmth, fuel or crop growth to a cutscene. Measured: the game clock drifts
    under 200 ms across a full replay.
  • If it breaks, it gets out of the way. The draw call is wrapped, and any error
    ends the cinematic and drops you into the game instead of trapping you in a black screen.

The bug worth writing down

The title screen now advertises the intro in its feature line, which meant reading
CINE.length inside the boot screen’s setup — and the cinematic module was defined
below that function in the file. In JavaScript the variable exists at that point but is
undefined, so reading a property off it threw, and the throw took out the rest of the setup
routine with it. The title screen still rendered; the intro simply did not exist. Everything
passed locally because the local run happened before the line was added, and I found it on the
live site a minute after deploying. Old lesson, freshly relearned: the run that matters is the one
after the last edit, not the one before it.

Live now at orbit2d.co as v0.7.1 — pick any of the twenty
worlds and it opens on that world. Feedback form is still on the title screen and still comes
straight to me.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *