Cold Start
README.md
coldstart
The demo's opening title sequence, "COLD START".
The whole picture is a pure function of one number — the time in seconds since
the sequence began. frameAt(t) returns the widget tree for that instant and no
state lives anywhere else, so the same t always produces the same image.
That is the point of the design: the sequence can be advanced by the frame clock or jumped to any instant, and both give the same frame. It can therefore be looked at while it is being built, one moment at a time, instead of only in the one-and-a-half seconds it happens to be on screen.
Driving it
local Intro = require("preseed.coldstart")
Intro.start() -- begin at t = 0 and show the screen
Intro.update(dt) -- advance by dt * SPEED and repaint; call every frame
Intro.stop() -- take it off the glass
Intro.seek(6.6) -- jump to an instant without touching the clock
Intro.time() -- where the sequence is now
Intro.finished() -- has it reached DURATION
DURATION is 12 sequence seconds. SPEED is how fast those run against wall
time, so the piece's real length is DURATION / SPEED. Every cue in the file is
written in sequence seconds, which means changing SPEED restretches the whole
sequence without moving any beat relative to another.
Looking at it
Because seek is deterministic, a whole contact sheet comes out of one call —
in edit mode, with the engine paused:
local Intro = require("preseed.coldstart")
for i, t in ipairs({ 0.3, 0.75, 1.9, 2.5, 4.2, 6.5, 7.6, 9.0, 11.3 }) do
Intro.seek(t)
task.wait()
tools.use("capture", "viewport", string.format("/source/tmp/intro/%02d.png", i))
end
The beats
| sequence time | beat |
|---|---|
| 0.0 – 1.6 | a slit of light opens the black; three counts fire over magenta |
| 1.6 – 3.6 | ORIGOZERO assembles letter by letter, then is thrown off frame |
| 3.6 – 5.8 | COLD tears across a cyan field, mirrored beneath itself |
| 5.8 – 8.6 | the title card: COLD / START on a magenta starburst |
| 8.6 – 10.6 | the roll, ticking in from the left |
| 10.6 – 12.0 | strobe to white, then the mark alone |
A white strike covers each cut between beats, so a change of beat reads as an impact rather than a swap.
Where it renders
The sequence is a full-frame screen. A letterbox crops its type and a heavy
grade dulls it, so the part that runs it clears both — see
preseed/parts/p_coldstart.module.