film
The shared spine of **Standing Ovation** — a 90-second cinematic demo set in a rotting 1,412-seat theatre. Two things live here and nothing else.
ovation.film
The shared spine of Standing Ovation — a 90-second cinematic demo set in a rotting 1,412-seat theatre. Two things live here and nothing else.
The constants
The Odeon Marisol's geometry (Film.GEO, Film.rakeY, Film.stallSeat,
Film.balconySeat), its palette (Film.PALETTE), its four light sources
(Film.LIGHTS), its acts (Film.ACTS) and its shot list (Film.SHOTS). Every
slice of the demo reads its colours and dimensions from here rather than
restating them, because two slices disagreeing about where row A stands breaks
the film in a way no screenshot explains.
The film clock
One deterministic timeline the whole demo runs on. It advances a fixed 1/24 s per rendered frame — it reads no wall time and no real frame delta, so the same build produces the same 2,160 frames on any machine, under a recorder or without one.
local Film = require("ovation.film")
Film.rewind() -- every reset hook fires, every cue re-arms, t = 0
Film.play() -- the Director advances it from the next rendered frame
Film.on("mine", function(t, dt, shot) end) -- called every frame
Film.at(47.0, "cue", function() end) -- once, as the clock crosses 47 s
Film.reset("mine", function() end) -- back to the t = 0 state
Film.stop() freezes it with the frame still composed. Film.seek(t) lands on
a moment for authoring and does not fire the cues in between.
Film.ramp, Film.smooth and Film.wave are the shared shaping helpers: this
film is made of waves crossing 1,412 identical figures.
Only ovation.director calls Film.tick.
Scoped to this part · feeds back into the world's score.