Bezier cameras, local waves
Camera paths and gravity pulse internals
Presentation utilities with no gameplay side effects. Anyone can call them; they never change mission state.
1. Camera paths
cameraPath takes keyframes of [positionASL, [dir,pitch,bank], [fov,weight]]. Weight is expanded
into duplicate path samples, giving slow and fast segments without extra keys. The path is validated before an active
camera is touched: fewer than two frames, more than 256 frames, non-numeric values or wrong element counts are rejected.
Movement runs in a per-frame handler using bezierInterpolation for position, rotation and FOV, with optional
smooth-step easing. The last shot stays active on purpose; call [false] call FF_cinematic_fnc_cameraPath to
release it. A new path replaces the active handler rather than stacking cameras.
2. Gravity pulse
gravityPulse accepts an object or an ASL position plus options: radius, speed, count, pause, debris, blur,
shake, light and colour. It returns a loop identifier on the server; a call made on a client is sent to the server and
returns an empty string. ["stop", id] call FF_cinematic_fnc_gravityPulse ends a loop, and an already emitted wave
completes naturally.
Loops emit subsequent waves for joining players but never replay past waves. The effect applies no force, damage or freeze; missions combine it with gameplay separately.
3. Horror entry points
FF_horror_fnc_cameraPath and FF_horror_fnc_gravityPulse call these implementations. Eden and
Zeus modules use them, so both names drive the same camera and pulse code.
4. Briefings, facecams and splash
Scene presentation is a set of small, independently usable services. None of them starts on its own: a mission registers a screen, plans a shot list or launches a sequence.
| Service | Entry point | What it owns |
|---|---|---|
| Physical briefing screen | briefingRegister(id, screen, slides, options) |
Slide deck, per-player selections, readiness roster, JIP metadata; paired with briefingUnregister. |
| Face cameras | facecamPlan then facecamStart |
Weighted appearances across scene blocks, staged positions, timed restoration of the participant and their seat. |
| Image-card sequence | splashStart(cards, onComplete, holdMusic) |
Full-screen cards with per-card hold and fades, monotonic timing, its own display and cleanup. |
| Scene driving | driveScene(vehicle, destinationATL, description) |
Orders the vehicle's local AI crew to a destination without touching player control. |
Slides are [heading, body, kind] with kind either text or ready; the
ready kind shows the live readiness roster. Requests come from players through
briefingRequest, are revalidated by briefingHandleRequest, and the shared state is published by
briefingServerTick and briefingPublishSites, so late joiners see the same slide and roster.
Facecam staging saves the participant's position, direction and vehicle seat, moves them for the shot and restores them at
the planned end time; facecamRestore accepts the expected generation and refuses to restore a newer session.
splashStart can hold the native music director for the duration of the cards, and releases it on completion or
cancellation.
Related functions
FF_cinematic_fnc_cameraPath— Owns a local camera and delegates movement to the shared animator.FF_cinematic_fnc_gravityPulse— Broadcast one or more visual pulses. No physics, freeze, or damage.FF_cinematic_fnc_gravityPulseLocal— Local-only particles, light and post-processing for a single travelling wave.FF_cinematic_fnc_briefingRegister— Registers an opt-in synchronized physical briefing screen and slide deck.FF_cinematic_fnc_facecamStart— Starts one server-owned facecam staging schedule from a supplied plan.FF_cinematic_fnc_splashStart— Plays an opt-in sequence of full-screen image cards with owned cleanup.