Mission maker · chapter 02 of 06
Player loop / Soul, gear, puzzles, CBRN, field tools
Everything that happens to a player from the first breath to the last clue: respawn, wardrobe, keys, circuit puzzles, hazard exposure and field utilities.
Soul respawn
The template is FF_Horror_Soul. It is inactive until the mission lists it in description.ext.
respawn = "INSTANT";
respawnDelay = -1;
respawnOnStart = -1;
respawnTemplates[] = {"FF_Horror_Soul"};
Remove any old onPlayerKilled.sqf / onPlayerRespawn.sqf that also controls death. Two systems
writing the same unit is the most common cause of a soul that never finishes.
What players experience
- An orbiting camera without cinematic borders. Space resists, but the bar cannot pass 30% until a shield is applied.
- Another living player applies a soul shield capsule through ACE interaction on the corpse.
- The camera keeps orbiting while the orb rises, then a white fade hands control over.
- The orb must move away from its start, then reach an eligible object. Arrival plays a short scene and respawns the player beside it.
- There is no automatic timeout. Zeus Soul tools can recover a genuinely stuck player.
Mission overrides
FF_horror_config = createHashMapFromArray [
["respawnClasses", ["Land_Calvary_01_V1_F", "Land_Bozi_muka"]],
["searchRadius", 700],
["wakeKey", 57],
["firstDeathMusic", "MyFirstDeathTrack"],
["soulMusic", "MySoulTrack"],
["onFirstDeath", { params ["_body", "_cfg"]; /* scene */ }],
["onDestination", { params ["_dest", "_pos", "_cfg"]; }],
["onRespawn", { params ["_new", "_old", "_pos", "_cfg"]; }]
];
Every key is validated before use; invalid values fall back to defaults instead of breaking the sequence.
Gear, clues and keys
Item classes keep their original FF_Horror_* names even though ownership moved. Utils defines the 36
clue/part/key classes, CBRN the four filter classes, Horror the 13 themed items. Editor pickups are under
Props > FF: Horror in six subcategories.
_unit addMagazine "FF_Horror_CarKey_03";
if ("FF_Horror_CarKey_03" in magazines _unit) then { /* allow */ };
// any car key, without caring about the number
private _hasCarKey = ((magazines _unit) findIf {
_x isKindOf ["FF_Horror_CarKey", configFile >> "CfgMagazines"]
}) >= 0;
Full list and copyable class names: Item catalog.
Wardrobe
Place Wardrobe settings once to publish a policy, then use Wardrobe access modules or the script entry point. The default destination is the player's current position, so nothing assumes a specific map location.
// trigger or module script
[[], createHashMapFromArray [["arsenalMode", "mission"]]] call FF_utils_fnc_wardrobeOpen;
// position array, or marker name
[getMarkerPos "wardrobe_spawn"] spawn FF_utils_fnc_wardrobeOpen;
Inspectable documents
[_object, "images\clue.paa"] call FF_utils_fnc_initDocument;
Puzzles with circuits
Circuit nodes replace one-off door scripts. Synchronize nodes, give each a Node ID, and list upstream IDs
in the downstream node's Input node IDs. Direction comes from the IDs, so the same sync line can be reused.
- Producer — item in the player's inventory, item in a synchronized container, boolean/number on an object, or a mission variable.
- Gate — AND, OR, NOT, XOR.
- Consumer — ACE action on synchronized targets; on use it broadcasts a completion variable and optionally drives an animation source.
Circuits check conditions, they do not consume items. The server re-evaluates the circuit before writing state, so a desynced client cannot complete a puzzle it does not satisfy.
CBRN
Three ways to start, in order of precedence:
- Mission hash map
FF_cbrn_config(falls back toFF_horror_cbrnConfig) plus a local start call. - CBRN settings module (writes the CBRN configuration map).
- CBA setting
FF_horror_cbrnEnabled.
// initPlayerLocal.sqf
FF_cbrn_config = createHashMapFromArray [
["enabled", true],
["followWorldFog", true],
["fogTopASL", 60]
];
[] call FF_cbrn_fnc_cbrnRefresh;
Hazard zones are hash maps. They can also be published at runtime:
FF_horror_cbrnZones = [createHashMapFromArray [
["center", gasTank], ["radius", 180], ["innerRadius", 30],
["danger", 7], ["minASL", 0], ["maxASL", 100]
]];
Full key list: Configuration reference. Mask/filter mechanics: CBRN internals.
Field utilities
Small Utils tools that need no modules. All shared-state calls are server-validated.
Blackout
private _r = [[[[1000,1000,0], 300]]] call FF_utils_fnc_blackout;
_r params ["_disabled", "_preserved"];
Disables terrain lamps outside the supplied safe circles. Zeus or server only.
Ammo provisioning
[_truck, units group player, 3] call FF_utils_fnc_prepareAmmo;
Tops a container up to a multiple of the operators' inventories. Server only.
Shared flashlights
Enable FF: Utils > Shared player flashlights so every client sees other players' beams. Off by default.
PASS beacons
Enable FF: Utils > PASS identification and casualty alarms for identification lights and automatic death/unconsciousness alarms on player bodies.
Loadout recovery
[createHashMapFromArray [["snapshotKey", "saved"]]
] call FF_utils_fnc_loadoutRecoveryStart;
Server-side snapshot that is copied to the respawned unit.
Inspectable documents
[_object, "images\clue.paa"] call FF_utils_fnc_initDocument;