FF SUITEArma 3 addons

Mission maker · chapter 05 of 06

Presentation / Music, traps, pulse, briefings and staging

What the mission looks and sounds like: shared music, gravity traps, pulse and emissions, physical briefings, face cams and synchronized scenes.

4 sections 05 / 06 Mission maker chapter

Mission music and overlays

If you want a soundtrack that stays in sync for everyone without writing a playback loop, register a director on the server and let each client opt into the follower.

// initServer.sqf
["operation", createHashMapFromArray [
    ["tracks", [["calm1", "Calm", "myCalmTrack", 120, 0.25]]],
    ["pools", [["calm", ["calm1"]]]]
]] call FF_cinematic_fnc_musicDirectorStart;
["operation", "select", ["calm", "quiet", 0]] call FF_cinematic_fnc_musicDirectorControl;

// initPlayerLocal.sqf
["operationPlayback", createHashMapFromArray [
    ["source", {["operation"] call FF_cinematic_fnc_musicDirectorState}]
]] call FF_cinematic_fnc_musicStart;

For a one-off cue, play it yourself and claim the channel first with FF_cinematic_fnc_musicHold so the native track yields instead of fighting you. For layered ambience that must stay in phase across clients, start FF_cinematic_fnc_loopAudioStart from a shared server time and release it with loopAudioFade / loopAudioStop.

Playback and overlays · Director.

Gravity traps

A prop that fires one expanding gravity wave when a player opens it or when it is destroyed.

// initServer.sqf
[_crate, createHashMapFromArray [
    ["radius", 50], ["duration", 1]
]] call FF_horror_fnc_gravityTrapRegister;

The default hit effect faults both firearms of every player the wave reaches and plays the local hit sound. Supply onHit when you want a different consequence: it runs on the server once per reached player. The FF: Horror > Gravity pulse trap Zeus module arms the object under the cursor through the same registration.

Pulse sequences and emissions

A pulse is a server-owned front on a shared clock, optionally followed by a shared blackout and recovery. Use pulseFrontStart for the wave alone, pulseBarrierStart for a blackout, or pulseSequenceStart for both:

// initServer.sqf
["finale", _origin, serverTime + 5, 900, 90, allPlayers,
 createHashMapFromArray [
    ["visual", true],
    ["onContact", { params ["_id", "_unit"]; /* server consequence */ }],
    ["cue", createHashMapFromArray [
        ["sound", "a3\missions_f_oldman\data\sound\alarm.ogg"],
        ["cueSeconds", 20], ["timeout", 30]
    ]]
]] call FF_cinematic_fnc_pulseSequenceStart;

The optional recovery is local and opt-in. Horror supplies a themed profile: [true, true] call FF_horror_fnc_pulseRecoveryOptions adds filter drain, bounded injuries, aftermath grading and a PASS wake alarm. The FF: Horror > Massive emission Zeus module starts the same system with weapon faults and vehicle aftermath included.

Details: Pulse sequences, Flying spheres and emissions.

Briefing screens and scene staging

Presentation services for the opening of a mission. All of them are opt-in and clean themselves up.

Briefing screen

["briefing", _screen, [
    ["Situation", "Text...", "text"],
    ["Team", "", "ready"]
], createHashMapFromArray [
    ["title", "Operation briefing"]
]] call FF_cinematic_fnc_briefingRegister;

Synchronized slides plus a live readiness roster; late joiners see the current slide.

Face cameras

private _plan = [_cast, _marks, _blocks]
    call FF_cinematic_fnc_facecamPlan;
[_plan, serverTime]
    call FF_cinematic_fnc_facecamStart;

Weighted appearances per scene block, with timed restoration of body and seat.

Image cards

[[["images\a.paa", 4, 1, 1],
  ["images\b.paa", 3, 1, 1]], {}, true]
    call FF_cinematic_fnc_splashStart;

Full-screen cards with per-card hold and fades; can hold the music director.

Drive a vehicle into a scene

[_truck, [400, 200, 0], "Arrive"]
    call FF_cinematic_fnc_driveScene;

Orders the vehicle's AI crew to a destination without touching player control.

Synchronized scene

// every participating machine, then the server
["intro", 30, [[5, {hint "Five seconds"}]], {}, {}]
    call FF_cinematic_fnc_sceneRegister;
["intro", serverTime + 3, []]
    call FF_cinematic_fnc_sceneBroadcast;

One shared clock for cues, staging and cleanup. Late joiners need a new broadcast.