Studio

FolioTier 2

@camera

Move the camera to a full shot framing - pan, zoom, and focal point glide together on one clock with a chosen motion curve. Duration 0 cuts straight to the framing.

@camera pushes or pulls the whole framing to a new position, zoom level, and focal point in one move. Reach for it whenever you want to punch in on a face, pull back to reveal a room, or drift the frame to follow the emotional weight of a line - x and y reposition the frame, scale controls how tight or wide it reads, and focus_x/focus_y let you bias where the eye settles within that framing.

Because pan, zoom, and focal point all ride the same clock and curve, the move reads as one continuous gesture rather than three separate adjustments fighting each other. Set duration to 0 when you need an instant hard cut to a new framing, such as snapping into a flashback or reacting to a jump scare.

Pick curve to match the emotional register of the move: decel for a settling push-in that lands on a line, overshoot or bounce for something more playful or jarring, elastic for a comedic wobble, and plain linear or slide when you just need a clean, unremarkable reposition. Leaving target empty moves the whole frame, which is what you want for establishing shots or scene-wide reveals; setting target to a sprite tag instead keeps the camera locked onto that character as they move, which is the better choice for following someone across the stage without hand-tuning x and y yourself.

Use wait=false when you want the camera drift to run underneath dialogue or another effect instead of blocking the script - stacking a slow @camera with wait=false alongside a @shake or a line of say gives you layered motion without extra bookkeeping. Keep in mind repeated @camera calls don't reset to center automatically; each new call moves relative to the current framing, so if you've zoomed and panned in, a later call meant to return to the establishing shot needs its own explicit x=0, y=0, scale=1 rather than assuming a clean slate.

Parameters

ParameterKindRequiredDefaultNotes
xnumberno0-2000 to 2000 pixels. Default 0.
ynumberno0-2000 to 2000 pixels. Default 0.
scalenumberno1.20.5-5 × multiplier. Default 1.2.
focus_xnumberno0.50-1 (0-1). Default 0.5.
focus_ynumberno0.50-1 (0-1). Default 0.5.
durationnumberno10-30 seconds. Default 1.
curvestringnoslideOne of: linear, slide, accel, decel, overshoot, bounce, elastic. Default slide.
delaynumberno00-10 seconds. Default 0.
targetstringno""Optional sprite tag; empty targets the whole frame.
waitbooleannofalseBlock for the effect's duration when true; false fires and continues so effects can overlap.

Canonical example

bg city-rooftop
@camera(2, x=-320, y=90, scale=2.4, curve=decel)
say "Liam": "There. Top floor."
@camera(1.2, scale=1)
narrate "The whole skyline swallowed the moment."

@camera frames a shot: one event describes the full camera pose - pan offset (x, y), scale, and the focal point - and the camera glides there in a single synchronized move with one duration and one curve. This is the difference from firing @pan and @zoom together, which animate on separate clocks with a fixed easing.

The shot model

  • duration=0 is a hard cut to the framing.
  • delay holds on the current framing before the move starts.
  • curve uses the same motion vocabulary as the sprite Move event (slide, linear, accel, decel, overshoot, bounce, elastic).
  • x / y are pixels on the nominal 1280x720 stage, so a framing is the same rectangle of the scene at every window size. (@pan uses raw canvas pixels; prefer @camera for new work.)

In the Forge inspector the pose is authored visually: drag a frame rectangle over the stage - the box is exactly what readers will see.

Persistence and reset

Like the other camera verbs, the pose is scene-scoped state: it holds until another camera event changes it. Reset with @camera(1, x=0, y=0, scale=1) - or duration=0 to snap back.

See also

  • @pan - pan only, legacy screen-px offsets
  • @zoom - zoom only, about a focal point
  • @kenburns - slow scale drift
  • @shake - stage-frame jitter (orthogonal to camera)