KetylCam
The playing camera of THE EIGHTH KETYL. A camera `behavior`, installed by the `Staging` component on the player's `CameraRig` in place of the orbital rig the scene ships with.
KetylCam
The playing camera of THE EIGHTH KETYL. A camera behavior, installed by the
Staging component on the player's CameraRig in place of the orbital rig the
scene ships with.
The shot
The ketyl drifts on a disc eighteen units across inside a glass column twenty-three across, so a camera standing behind it at any readable distance would be outside the still, looking in through black glass. Instead the eye stands across the column from the ketyl and solves its own distance from the axis so the subject is always the same size:
glass wall glass wall
────┬───────────────────────────────────────────────────────────┬────
│ eye ●──────────── dist ────────────▶ ● ketyl │
│ (radius solved) axis│ │
The shaft, the plate the ketyl is on and the plate above it are therefore always
behind the subject — plate edges receding upward, which is the composition the
whole game is built on. staging.Frame solves dist and the lens from the LIVE
screen, so a tall screen and a wide one both hold the play; on a screen taller
than 3:4 the eye stops at the wall and opens the lens instead of retreating
through it.
Looking
The pilot aims nothing. It forwards the look control as
Still.emit("look", v, dt, active) and this consumes it: horizontal swings the
eye around the column, stopped short of the angle at which it would have to pass
through the glass, and vertical raises and lowers it between looking up the
shaft and looking down on the plate. Let go and the shot walks itself back
across the column after recentreDelay.
Two modes
mode is "auto" by default, which reads the run's phase: the title gets a
slow attract orbit of the still with the shaft up the middle of a tall frame,
and everything else gets the playing shot. "play" and "attract" force one.
Fields
| Field | Default | What it does |
|---|---|---|
follow | — | The ketyl. Empty, it reads Camera.follow. |
mode | "auto" | "auto" · "play" · "attract". |
yawRange | 1.75 rad | How far round the column the player may swing the shot, on top of the limit the geometry imposes. |
lookSpeedX / lookSpeedY | 0.0042 / 0.0090 | Look sensitivity. |
dampPos / dampYaw | 0.14 / 0.22 s | How far behind the subject the shot trails. |
recentreDelay / recentreRate | 2.6 s / 0.55 | When and how fast an unattended shot returns to across-the-column. |
clearance | 0.35 | The sphere swept from the aim point out to the eye; anything it meets brings the eye in. Zero leaves the shot alone. |
Methods
local cam = entity(rigId).component.get("KetylCam")
cam:snap() -- land on the solved pose with no damping
cam:recentre() -- undo whatever the player swung it to
cam:report() -- mode, eye radius, yaw, climb, distance, lens, aspect
Scoped to this part · feeds back into the world's score.