Mission maker · chapter 06 of 06
Session and shipping / Spectator, Zeus footer, naming contract, multiplayer checklist
The last mile: spectator access, custom Zeus fields, the names you cannot rename, and the multiplayer checks that catch problems before players do.
Spectator
A separate mod, off until you switch it on. The server decides who can watch, the client gets thirteen camera presets, six overlay layers, night vision control and optional personal-radio sync.
// initServer.sqf and initPlayerLocal.sqf
[true, "auto", createHashMapFromArray [["slots", [_viewerUnit]]]]
call FF_spectator_fnc_serviceStart;
Viewers are an explicit VirtualSpectator_F, an Eden unit named spectator, or a unit in
slots; everyone else stays a controller or an ordinary player. Alias entry points share the same implementation.
Full detail: Spectator internals.
Custom Zeus footer fields
// initServer.sqf
["objectives", "Objectives", { missionNamespace getVariable ["done", 0] }, 2, "server"]
call FF_zeus_fnc_registerZeusFooterStatus;
["objectives", "server"] call FF_zeus_fnc_unregisterZeusFooterStatus;
Register on the machine that owns the value: server fields are broadcast, local fields are viewer-only. Horror's
FF_horror_fnc_registerZeusFooterStatus is also available and calls the Zeus registry.
Naming contract
| Name | Rule |
|---|---|
FF_Horror_* item and pickup class names | Public API. Mission scripts, loadouts and editor placements use them. |
FF_horror_fnc_* public functions | Public API. Each one calls the implementation owned by its component. |
| Editor module class names and attributes | Public API. Eden files store them by name. |
State keys such as FF_horror_cbrn*, FFPP_*, FFATM_* | Public API. Missions read and write them directly. |
| CBA setting identifiers | Public API. CBA presets store them by name. |