Skip to content

Server Gameplay Runtime Atlas

rayswaynl edited this page Jun 13, 2026 · 30 revisions

Server Gameplay Runtime Atlas

Upstream-history note: Miksuu commit clusters show that server runtime changes around town AI, JIP and performance often need follow-up fixes. Read Developer history and upstream lessons before altering long-running server loops or wakeup logic.

This atlas maps long-running server gameplay loops and runtime surfaces that future owners should treat carefully. Paths are relative to Missions/[55-2hc]warfarev2_073v48co.chernarus/.

For deployment, packaging, BattlEye, extension and RPT collection questions, use Server runtime and operations to route to the correct operations page instead of expanding this runtime atlas.

How To Use This Atlas

This page is the server-loop orientation map. Use it to find the runtime owner, then follow the branch/status page before making a current-master, release or patch-ready claim.

Need Start here Then route to
Server startup gates and long workers Runtime Loops, Branch Scope For Source Anchors SQF code atlas, Lifecycle wait-chain
Town capture, town AI and camps Town capture / town AI rows Towns/camps/capture, AI runtime/HC loop map
Economy, resources and supply missions Resource loop / supply mission rows Economy, towns and supply, Supply mission architecture, Feature status register
Patrols v2 and HC delegation Side patrol branch row Towns/camps/capture, Headless delegation/failover
FPS publishers, collectors and performance proof FPS / collector rows Performance opportunity sweep, Testing workflow, Source fix propagation queue
Direct PV/PVF authority risks Current Runtime Risks Public variable channel index, Server authority migration map
Deployment, logs and release operations Do not expand this page Server runtime and operations, Server ops runbook

Branch Scope For Source Anchors

Unless a row names another ref, source anchors below are from this docs checkout, docs/developer-wiki-index at 6afcc58e. origin/master is currently cf2a6d6a and has server-source drift, so use the owner pages before turning this atlas into branch evidence.

Runtime surface Docs checkout 6afcc58e origin/master cf2a6d6a Owner route
AI supply-truck startup Init_Server.sqf:36 comments the compile, but the AI-commander/supply-system gate still raw-spawns UpdateSupplyTruck at :383. Init_Server.sqf:37 still comments the compile, but :383-384 initializes wfbe_ai_supplytrucks and logs that legacy supply-truck logistics are disabled instead of spawning the missing worker. AI commander autonomy
Patrols side-upgrade driver No Server/FSM/server_side_patrols.sqf exists in this docs checkout source; old server_patrols.sqf remains present. Init_Server.sqf:533 starts server_side_patrols.sqf; that driver waits for townInitServer at :16, dispatches a live HC at :54 or local runner at :56, and publishes patrol marker state through the owner route. Towns/camps/capture, AI runtime/HC loop map
Server FPS publishers Init_Server.sqf:578,595 starts serverFpsGUI.sqf and monitorServerFPS.sqf; both files exit on !isDedicated at line 1. Init_Server.sqf:580 starts serverFpsGUI.sqf; :596-598 records that monitorServerFPS.sqf was removed as a redundant publisher, and serverFpsGUI.sqf:4 exits on !isDedicated. Hosted server FPS loop sleep, Performance opportunity sweep

Runtime Loops

Runtime surface Source anchors Notes
Town capture loop Server/Init/Init_Server.sqf:510; Server/FSM/server_town.sqf Server-owned capture, supply value changes, camp side updates and performance audit rows.
Town AI loop Server/Init/Init_Server.sqf:512-514; Server/FSM/server_town_ai.sqf Defender/occupation activation, town AI delegation, static defense operation and despawn behavior.
Resource loop Server/Init/Init_Server.sqf:531; Server/FSM/updateresources.sqf:20-75 Side supply/player funds/commander funds. The _supply < WFBE_C_ECONOMY_SUPPLY_MAX_TEAM_LIMIT gate wraps all three payout paths, so economy-cap changes can suppress paychecks and AI commander funds as well as side-supply growth.
Victory loop Server/Init/Init_Server.sqf:528; Server/FSM/server_victory_threeway.sqf Winner inversion/double-fire hazards live here; route through DR-11/DR-36 before patching.
Supply mission tracking Server/Module/supplyMission/supplyMissionStarted.sqf; Server/Module/supplyMission/supplyMissionCompleted.sqf Client-stamped cargo/reward state remains an authority cleanup lane; completion calls ChangeSideSupply, so rewards hit the DR-44 wfbe_supply_temp_<side> final mutation channel. Scan narrowing is docs/source propagated; use Current source status snapshot before making stable-master or release claims.
Patrols side-upgrade driver Branch-sensitive: origin/master Init_Server.sqf:533; Server/FSM/server_side_patrols.sqf:16,24,54,56; Common/Functions/Common_RunSidePatrol.sqf Current origin/master has Patrols v2 source in Chernarus and maintained Vanilla, but this docs checkout source does not. Treat old DR-57 town-patrol wording as historical for earlier branches; current Patrols v2 is source-present and smoke-pending.
Garbage and empty-vehicle collectors Server/Init/Init_Server.sqf:535,537; Server/FSM/server_collector_garbage.sqf; Server/FSM/emptyvehiclescollector.sqf Dead-object and empty-vehicle cleanup surfaces; route supply-truck timeout and cleanup policy through Marker cleanup/restoration and Performance opportunity sweep.
HQ killed processing Server/Construction/Construction_HQSite.sqf:89,91; Client/Init/Init_Client.sqf:500-503; Server/Functions/Server_OnHQKilled.sqf:46-81,96-114 Mobile-HQ killed EHs can fire from multiple owning-side clients; Server_OnHQKilled.sqf currently has no processed-once guard before score awards, messages and HQ marker/state broadcasts. Canonical finding: Deep-review findings DR-20.
Server FPS publishing Server/GUI/serverFpsGUI.sqf; Server/Module/serverFPS/monitorServerFPS.sqf; Server/Init/Init_Server.sqf:578,595 Current docs/source exits both publishers on !isDedicated; Arma smoke and branch-scope proof still decide release status. Canonical finding: Deep-review findings DR-19.
Side radio/message pipeline Server/Init/Init_Server.sqf:32; Server/Functions/Server_SideMessage.sqf; callers in server_town.sqf:199,230,233, Server_BuildingKilled.sqf:92 and Server_ProcessUpgrade.sqf:85 Server-owned HQ-radio/kbTell messages for towns, bases, strongpoints, construction, commander votes and upgrades. Keep this separate from LocalizeMessage chat/PVF effects. See SideMessage pipeline shape.

Server init is one dense startup cluster around Server/Init/Init_Server.sqf:507-626 in this docs checkout and around the same worker band in origin/master. Runtime edits should be reviewed as a worker set rather than isolated scripts; use AI runtime/HC loop map for AI/HC loop tables, External integrations for AntiStack/DB deployment and Testing workflow for smoke scope.

SideMessage Pipeline Shape

SideMessage is a server-compiled radio wrapper, not the same path as client LocalizeMessage. Server init compiles it from Server/Functions/Server_SideMessage.sqf (Server/Init/Init_Server.sqf:32). The handler reads the side, message key and optional parameters (Server_SideMessage.sqf:3-5), resolves the side radio HQ speaker/receiver/topic from side logic (:7-11) and then calls kbTell through a compact switch (:13-64).

The payload shape is message-family dependent:

Message family Expected shape Representative callers
Town object messages [_side, "Lost" / "Captured" / "HostilesDetectedNear", _townLogic] town lost/captured uses server_town.sqf:230,233; town-AI activation uses server_town_ai.sqf:134.
Nearby strongpoint/town messages [_side, "LostAt" / "CapturedNear", ["Strongpoint", _townLogic]] camp side changes use server_town_camp.sqf:127,130; handler expects select 0 as a spoken label and select 1 as the town logic (Server_SideMessage.sqf:23-30).
Base or town attack/construction messages [_side, "Constructed" / "Destroyed" / "Deployed" / "Mobilized" / "IsUnderAttack", ["Base", _structure]] or ["Town", _townLogic] construction/HQ paths use Construction_SmallSite.sqf:115, Construction_MediumSite.sqf:130, Construction_HQSite.sqf:35,88; base damage/kill/HQ kill use Server_BuildingDamaged.sqf:13, Server_BuildingKilled.sqf:92, Server_OnHQKilled.sqf:53; town attack uses server_town.sqf:199.
No-parameter radio topics [_side, "VotingForNewCommander" / "NewIntelAvailable" / "MMissionFailed" / "NewMissionAvailable"] commander vote uses RequestCommanderVote.sqf:20; upgrade completion uses Server_ProcessUpgrade.sqf:85.
Parameterized mission/extraction topics [_side, "MMissionComplete" / "ExtractionTeam" / "ExtractionTeamCancel", [spokenText, dubbingClass]] handled by Server_SideMessage.sqf:61-62; source-check the current caller before adding one.

Do not collapse this into LocalizeMessage. LocalizeMessage is registered as a client PVF (Common/Init/Init_PublicVariables.sqf:32) and its client handler can show chat/title text or mutate local funds for some tags, for example Teamkill, SecondaryAward and HeadHunterReceiveBounty (Client/PVFunctions/LocalizeMessage.sqf:49,53,57-68). SideMessage is the server-owned radio/dubbing path. If you add radio lines, dubbing classes or new side-message keys, smoke each payload family in Arma 2 OA and inspect both the side radio output and the adjacent LocalizeMessage path if the same gameplay event also emits chat/economy feedback.

Current Runtime Risks

Risk Status Owner route
Hosted/listen FPS busy loop Branch-sensitive. Docs checkout 6afcc58e keeps two guarded publishers (Init_Server.sqf:578,595, both files exit on !isDedicated at line 1); origin/master cf2a6d6a keeps serverFpsGUI only and records the redundant publisher removal at Init_Server.sqf:596-598. Arma smoke still decides release-ready wording; DR-19. Hosted server FPS loop sleep, Current source status snapshot and Deep-review findings DR-19
Supply command-center broad scan Docs/source propagated; stable/release branch status and Arma smoke decide shipped state Supply mission scan narrowing
Supply reward/cooldown authority Open hardening; includes DR-44 final side-supply mutation channel Supply mission authority cleanup
AI supply-truck startup branch split Docs checkout 6afcc58e still raw-spawns the uncompiled UpdateSupplyTruck worker at Init_Server.sqf:383; origin/master cf2a6d6a and release a96fdda2 log-disable the legacy logistics path instead. AI commander autonomy, Source fix propagation queue
Patrols v2 source/smoke split origin/master cf2a6d6a starts server_side_patrols.sqf; this docs checkout source does not. Current master is source-present and smoke-pending, not the old DR-57 broken-town-patrol shape. Towns/camps/capture, AI runtime/HC loop map, Testing workflow
Victory double-fire/winner inversion Open correctness Deep-review findings DR-11/DR-36
HQ-killed duplicate processing / score exploit Open correctness; DR-20 Deep-review findings DR-20
Direct PV authority Open hardening Public variable channel index
Side-message payload shape Source-cited runtime surface Use SideMessage pipeline shape. SideMessage takes different parameter shapes for town, strongpoint, base/construction and no-parameter radio topics; keep it separate from LocalizeMessage before adding radio/dubbing or changing message text.
AntiStack/database loops High-sensitivity lifecycle surface External integrations, AntiStack database extension audit and AI runtime/HC loop map
Dormant maintenance hooks Init_Server.sqf:36 comments UpdateSupplyTruck; :567 comments groupsMonitor; :65,88-92 retain older commented AFK/server-FPS/MASH compile remnants. The supply-truck runtime gate is branch-sensitive, so use the AI supply-truck row above before claiming it is dormant on a target branch. Keep disabled hooks documented as historical or deliberately revive them with owner-scoped smoke. Duplicate live bind cleanup is tracked in Server init bind cleanup.

Safe Runtime Rules

  • Do not remove sleeps or change scan cadence without measuring gameplay and performance effects.
  • Keep Arma 2 OA hosted/dedicated/headless differences explicit; do not import Arma 3 locality/JIP examples.
  • Treat publicVariable handlers as lacking a trusted sender identity unless source proves a server-owned anchor.
  • When gameplay code is requested later, patch source Chernarus first and propagate generated Vanilla Takistan through LoadoutManager.

Continue Reading

Systems: Gameplay systems atlas | Performance: Performance opportunity sweep | Current truth: Current source status snapshot | Propagation: Source fix propagation queue

Sidebar

Clone this wiki locally