Fronts, barriers, recovery, cues, wavefronts
Pulse sequences and recovery internals
A server-owned pulse that reaches players on a shared clock, followed by an opt-in blackout and recovery sequence. The front, the barrier, the local recovery profile and the visual wavefront are separate layers so a mission can use only the part it needs.
1. The layers
| Layer | Entry points | Runs on |
|---|---|---|
| Authoritative front | pulseFrontStart / pulseFrontStop | Server |
| Shared blackout barrier | pulseBarrierStart / pulseBarrierCancel / pulseBarrierContact / pulseBarrierExclude | Server |
| Combined sequence | pulseSequenceStart / pulseSequenceStop | Server |
| Local recovery | pulseRecoveryStart / pulseRecoveryRelease / pulseRecoveryStop | Participant client |
| Remote invitation | pulseRecoveryBeginRemote / pulseRecoveryCancelRemote / pulseBarrierReport | Server ⇄ participant |
| Riser cue and wavefront | pulseCueLocalStart / pulseCueTick / wavefrontStart | Local client |
| Shared loop audio | loopAudioStart / loopAudioFade / loopAudioStop | Local client |
2. Authoritative front
[id, originASL, start, radius, speed, players, onContact, onExit, onEnd, cue] call FF_cinematic_fnc_pulseFrontStart
tracks a finite linear wave against an explicit player roster. The travel time is radius / speed and is
limited to 600 seconds; the start cannot be more than 600 seconds in the future. Up to 16 fronts may exist, each with at
most 128 participants.
The server evaluates one contact or exclusion per participant per tick. A participant who dies, disconnects, changes owner
or moves outside the radius is reported through onExit. The front can carry an optional cue
hash map with sound, cueSeconds and timeout; the cue schedules the local riser and
contact still follows the shared clock.
3. Shared blackout barrier
A barrier keeps a group of players blacked out until every current participant reports black or the deadline expires. The options and their bounds are:
| Key | Default | Bounds | Meaning |
|---|---|---|---|
automatic | true | bool | Invite every participant immediately instead of waiting for front contact. |
blackTimeout | 55 | 1–600 s | How long a participant may take to report the blackout. |
recoveryTimeout | 180 | 10–900 s | How long the recovery window stays open. |
releaseDelay | 1 | 0–30 s | Shared delay before recovery is released. |
onBlack | {} | code | [id, players] when the barrier moves to recovery. |
onEnd | {} | code | [id, completed, aborted] when the barrier ends. |
A player may belong to only one barrier at a time. pulseBarrierExclude removes a waiting participant and
cancels their pending recovery; pulseBarrierCancel ends the barrier and every matching participant sequence.
The server also reclaims a staged body when its owner changes machine.
4. Combined sequence
[id, originASL, start, radius, speed, players, options] call FF_cinematic_fnc_pulseSequenceStart starts a front
and a barrier with the same ID. Up to eight sequences may run. Options are:
onContact [id, unit],onExit [id, unit],onBlack [id, units]andonEnd [id, frontCompleted, completed, aborted].cue— the front cue hash map described above.visual(defaultfalse),color(RGBA, default red),dustandvisualExtra(0–120 s). Visual data is published separately and carries no gameplay authority.
A sequence ends only after both halves have finished, so onEnd sees the front result and the barrier outcome
together. pulseSequenceStop cancels both halves. pulseSequencePublishVisuals and
pulseSequenceVisualTick keep presentation in sync, including after a JIP.
5. Local recovery profile
[id, originASL, options] call FF_cinematic_fnc_pulseRecoveryStart starts the local blackout on a living,
local player who is not incapacitated and has no other recovery active. The profile captures damage permission, sound
volume and PASS suspension, disables user input and damage, moves the player out of a vehicle, applies a directional force
and camera shake, and starts a 0.05 s worker.
| Key | Default | Bounds |
|---|---|---|
blackDelay | 0.2 | 0–10 s |
wakeDelay | 18 | 0–120 s |
reveal | 10 | 0–60 s |
timeout | 240 | 5–900 s |
soundLevel | 0.1 | 0–1 |
soundHold / soundFade | 0 / 0 | 0–600 s |
onPhase | {} | [id, unit, phase]: impact, recovery or wake. |
onStop | {} | [id, unit, completed] |
pulseRecoveryRelease releases the blackout at a shared server time; pulseRecoveryStop tears down
everything the profile owns. pulseRecoveryReclaimLocal, pulseRecoveryReclaimDispatch and
pulseRecoveryLocality restore a staged body after an ownership change, guarded by the same ID and generation.
6. Riser cue and visual front
The optional cue starts only when the server authorizes a local listener. pulseCueLocalStart receives the
front parameters and pulseCueTick starts the riser when the player faces the approaching front and reports
the commitment and playback contact. A server-confirmed contact is marked through
pulseCueLocalContact; pulseCueStopLocal stops only the matching riser.
wavefrontStart renders one finite expanding sphere per client. It takes an origin, start time, radius, speed,
RGBA colour, contact callback, dust flag, optional front override callback and extra lifetime. The per-frame projection
about the camera preserves apparent size at long range. The wave is visual only: contacts and consequences stay on the
server.
7. Loop audio
loopAudioStart(id, start, tracks, fadeIn, owner) starts phase-preserving local UI loops. Each track is
[path, delay, cycle, volume]. loopAudioFade schedules a phase-preserving fade-out and
loopAudioStop releases only the handles owned by that loop set. Re-seeking happens only for gain changes and
loop boundaries, so a shared timeline stays aligned without restarting the sound every frame.
8. Horror profile
[consequences, beacon] call FF_horror_fnc_pulseRecoveryOptions returns a Cinematic recovery hash map with a
themed aftermath. On impact it holds the music channel and applies red grading; during recovery it can drain the active
filter and apply bounded ACE injuries; on wake it can request a timed PASS alarm. pulseAftermath applies or
clears the grading, and pulseProfileClear releases owned audio, grading, the music hold and delayed callbacks.
Code-level guarantees: option bounds, callback ordering and the shared timeline maths. Local input, camera, audio and multiplayer behaviour remain manual checks.
Visual reference: flying sphere field capture.
Related functions
FF_cinematic_fnc_pulseSequenceStart— Starts a front and shared recovery barrier for an explicit roster. Server only: [id, origiFF_cinematic_fnc_pulseFrontStart— Tracks an authoritative finite linear wave against an explicit player roster.FF_cinematic_fnc_pulseBarrierStart— Starts a server-owned shared blackout barrier for explicit participants.FF_cinematic_fnc_pulseRecoveryStart— Starts an opt-in local pulse impact and shared-blackout recovery sequence.FF_cinematic_fnc_wavefrontStart— Renders one finite expanding spherical front on the local client.FF_cinematic_fnc_loopAudioStart— Starts phase-preserving local UI sound loops with a bounded fade-in.FF_horror_fnc_pulseRecoveryOptions— Returns an opt-in Horror profile for Cinematic pulse recovery.FF_horror_fnc_pulseAftermath— Applies or clears the local pulse's owned red impact and recovery grading.