-
Notifications
You must be signed in to change notification settings - Fork 0
Commander HQ Lifecycle Atlas
Canonical source-backed map for commander selection, commander-client affordances, HQ/MHQ deployment, HQ destruction, wreck tracking and MHQ repair. This page bridges Construction and CoIn systems, AI commander autonomy audit, Commander reassignment call shape, Server authority migration map and Public variable channel index.
Unless a branch/ref is named, source paths below are relative to the Chernarus mission root, Missions/[55-2hc]warfarev2_073v48co.chernarus/. The initial HQ/team-spawn section was refreshed against live mission origin/master 0139a3468 on 2026-06-21. The HQ score/bounty matrix was refreshed against docs/source HEAD@c2d513ecb, current stable/B74.1 origin/master@f8a76de34, B69 origin/claude/b69@8d465fce, B74 origin/claude/b74-aicom-spend@b23f557f and Miksuu score/HQ/bounty branch-name candidates on 2026-06-23; older branch-matrix rows keep their named provenance.
| Need | Start here | Then route to |
|---|---|---|
| Commander vote, no-commander outcome, manual reassignment | Commander Vote Flow, Manual Reassignment Flow | Commander vote/reassignment, Commander reassignment call shape |
| HQ deploy, mobilize and base-area state | HQ Deploy And Mobilize | Construction and CoIn systems, Server authority migration map |
| Initial HQ placement, editor team registration and first client spawn | Initial HQ And Team Spawn Flow | Mission entrypoints and lifecycle, Respawn and death lifecycle, Networking and public variables |
| HQ kill score, bounty and wreck markers | HQ Destruction And Wreck Markers, HQ kill score matrix | Feature status, Source fix propagation queue |
| MHQ repair and WASP cash HQ recovery | MHQ Repair, WASP Cash HQ Recovery | Economy, towns and supply, Server authority migration map |
| Commander task pings and old task-system residue | Authority And Risk Register | Client UI systems atlas, Networking and public variables |
| AI commander assumptions | Commander Vote Flow | AI commander autonomy audit |
Checked 2026-06-14 against current docs head 8c3942d2 (targeted commander/HQ source paths unchanged from f82a9127 and e2c9f6ed), stable origin/master cf2a6d6a, Miksuu b8389e74, origin/perf/quick-wins 0076040f, release a96fdda2 and origin/feat/ai-commander c20ce153.
HQ score/bounty was rechecked 2026-06-23 against docs/source HEAD@c2d513ecb (source-unchanged from 9b7eb4bc for checked HQ-score files), current stable/B74.1 origin/master@f8a76de34, B69 origin/claude/b69@8d465fce, B74 origin/claude/b74-aicom-spend@b23f557f, current Miksuu b8389e748243, origin/perf/quick-wins@0076040f and historical a96fdda2 in both maintained roots. A same-day Miksuu branch-name scan classified score/HQ/bounty-looking branches as historical or branch-only evidence unless the table below says otherwise. Other rows keep their 2026-06-14 branch provenance until refreshed.
Manual commander reassignment was rechecked 2026-06-24 after git fetch --all --prune. Repo docs branch HEAD@1f07b39d is unchanged from 60c35c05 for checked reassignment paths and still has the old helper unpacking in both maintained roots; current stable/B74.1 origin/master@f8a76de34, current B74.2 origin/claude/b74.2-aicom@21b62b04, B69 origin/claude/b69@8d465fce, adjacent B74 origin/claude/b74-aicom-spend@b23f557f, Miksuu b8389e748243, origin/perf/quick-wins@0076040f, historical release a96fdda2 and historical AI-commander c20ce153 fix helper unpacking in both maintained roots. The scoped docs-head, current-stable..B74.2, previous-B74.2..current-B74.2 and B69..B74 diffs are empty for checked reassignment paths. origin/claude/trello-vote-para-guards@92101abe changes only Server_VoteForCommander.sqf among those commander paths. Full modded Napf/Eden/Lingor forks on current stable still carry _side = _this in Server_AssignNewCommander.sqf:3.
| Surface | Current branch truth | Route |
|---|---|---|
| Commander vote semantics | Branch-split after the 2026-06-23 B74.2 current-head follow-up: current stable/B74.1 origin/master@f8a76de34, B74.2 origin/claude/b74.2-aicom@21b62b04, current B69 origin/claude/b69@8d465fce and adjacent B74 origin/claude/b74-aicom-spend@b23f557f use _highest >= _aiVotes at Server_VoteForCommander.sqf:43 in both maintained roots, but GUI_VoteMenu.sqf:88 still previews row-0/strict-majority AI/no commander. Docs/source HEAD@e0d82714, Miksuu b8389e748243, perf 0076040f, historical a96fdda2 and historical c20ce153 still keep the old `>= |
|
| Manual reassignment helper | Docs/source HEAD@1f07b39d is unchanged from 60c35c05 for checked reassignment paths and still uses _side = _this in Server_AssignNewCommander.sqf:3 in both maintained roots. Current stable/B74.1 origin/master@f8a76de34, current B74.2 origin/claude/b74.2-aicom@21b62b04, B69, adjacent B74, Miksuu, perf, historical release and historical AI-commander refs unpack _side = _this select 0 / _commander = _this select 1 at helper :4-5 in both maintained roots, but duplicate new-commander-assigned senders (RequestNewCommander.sqf:14 plus helper :10) and visible-name UI targeting (GUI_Commander_VoteMenu.sqf:33,37) remain open. Current stable full modded Napf/Eden/Lingor forks still carry the old helper shape. |
Commander reassignment call shape |
| HQ score/bounty | Docs/source HEAD@c2d513ecb, current stable/B74.1 origin/master@f8a76de34, B69 origin/claude/b69@8d465fce, B74 origin/claude/b74-aicom-spend@b23f557f, current Miksuu b8389e748243, origin/perf/quick-wins@0076040f and historical a96fdda2 still keep the generic HQ building score plus second HQ bounty shape in both maintained roots. B69/B74/B74.1 add base-fall smoke/sting code around the handler, but not a scoring fix. |
HQ kill score and bounty branch matrix |
| Objective Ping / commander tasks | Repo docs branch HEAD@c5937045f, Miksuu b8389e748243, perf 0076040f and historical c20ce153 leave maintained-root SetTask sends commented at GUI_Menu_Command.sqf:335,337,343; current stable/B74.1 origin/master@f8a76de34, current B74.2 origin/claude/b74.2-aicom@21b62b04, B69 origin/claude/b69@8d465fce, B74 origin/claude/b74-aicom-spend@b23f557f and origin/feat/naval-hvt-objectives@2e1c59317186 send targeted Objective Ping tasks at :336,344. Historical a96fdda2 has live sends but no live release/* head. Old town TaskSystem remains separate/commented residue; current stable/B74.1/B74.2/B69/B74/naval-HVT remove the old Client_TaskSystem.sqf helper. |
Client UI systems atlas, Networking and public variables |
| HQ repair and base-area authority |
RequestMHQRepair still sends only side, and base-area accounting still depends on client-bound RequestBaseArea; treat both as authority-sensitive before expanding HQ recovery or deploy limits. |
Server authority migration map, Construction and CoIn systems |
| B74.5 AI-only MHQ relocation/base helper route | Current origin/claude/b745@712a7a668 still includes the B74.5 evidence, and the later B74.6 b996bcb3..712a7a668 delta does not touch the checked MHQ/base helper paths. The B74.5 payload does not introduce the MHQ relocation worker from scratch: current stable/B74.1, current B74.2 and maintained Vanilla already compile/call WFBE_SE_FNC_AI_Com_MHQReloc. The B74.5 source-Chernarus delta adds WFBE_C_AICOM_MHQ_ABORT_COOLDOWN = 600 (Init_CommonConstants.sqf:312-318) and stamps/skips wfbe_mhqreloc_abort_until in AI_Commander_MHQReloc.sqf:42-49,151-159; the new AI_Commander_BaseSell.sqf is an AI commander redundant-structure recycle worker, not a human commander HQ sell mechanic. |
AI commander autonomy, Construction and CoIn systems |
Transfer-menu HQ deploy-cost display branch origin/claude/trello-upgrade-hqcost-info@34fd202c8865 / draft PR #75 |
Branch merge-base is current stable origin/master@f8a76de34; in both maintained roots GUI_TransferMenu.sqf:124-129 appends STR_WF_INFO_NewHQCost using missionNamespace getVariable "WFBE_C_STRUCTURES_HQ_COST_DEPLOY" below the existing funds/team/commander-share footer. Current stable has the deploy-cost constant at Chernarus Init_CommonConstants.sqf:684 / Rsc/Parameters.hpp:119 and maintained Vanilla Init_CommonConstants.sqf:486 / Rsc/Parameters.hpp:141, and uses it in HQ structure config, but the transfer menu footer stops at GUI_TransferMenu.sqf:124-125. |
Branch-only commander/economy UI visibility candidate; route UI ownership through Client UI systems, upgrade-notification evidence through Upgrades and research, and smoke via Testing workflow. |
HQ build-area map circle branch origin/claude/trello-map-radius-circles@77dd71ba / draft PR #78 |
Branch merge-base is current stable origin/master@f8a76de34; payload is six maintained-root files / +192 / -4 and git diff --check clean. In both maintained roots Init_BaseStructure.sqf adds a local HQBuildRange* ellipse only when the Base_WarfareBUAVterminal structure is the HQ. The radius is the build-placement sum WFBE_C_BASE_AREA_RANGE + WFBE_C_BASE_HQ_BUILD_RANGE (Chernarus branch :54-68, cleanup :151-158; Vanilla :35-49, cleanup :132-139). Current stable has only the command-center CCrange* ellipse and no branch marker symbols. The same radius is used by placement logic in both roots: Common_GetClosestEntity2.sqf:14, Construction_HQSite.sqf:49, basearea.sqf:3-13; constants are Chernarus Init_CommonConstants.sqf:455-456 and Vanilla :277-278. |
Branch-only commander/construction map indicator, not current stable behavior. Route UI ownership through Client UI systems, construction radius semantics through Construction and CoIn systems and promotion through Feature status. Smoke HQ deploy/build placement at the ring edge, HQ destruction/mobilization cleanup, side coloring, JIP/map visibility and maintained Vanilla Takistan parity before stable/release wording. |
The commander/HQ layer is the hinge between RTS control and the rest of the Warfare mission. A wrong change here can strand players without build access, break JIP HQ state, duplicate commander messages, expose enemy-only HQ wreck markers, bypass economy authority, or make an AI commander look alive when only a few helper variables exist.
The useful mental model:
- side logic objects own canonical replicated state such as
wfbe_commander,wfbe_hq,wfbe_hq_deployed,wfbe_hq_repairing,wfbe_hq_repair_count,wfbe_votetime,wfbe_baseareaand radio-HQ variables; - the server creates, destroys, repairs and swaps HQ/MHQ objects;
- clients watch replicated side-logic state to add/remove commander actions, initialize CoIn and draw local allied HQ wreck markers;
- several surrounding actions still trust client-side checks or direct publicVariable flows and need hardening before public-server confidence.
| Role | Files |
|---|---|
| Server side init/state | Server/Init/Init_Server.sqf:389-450,475-492,844 |
| Initial start picker / HQ placement |
mission.sqm:50,250,267,284,302,320,323,4334-4788,5031-5043, Rsc/Parameters.hpp:153-164, Common/Init/Init_CommonConstants.sqf:242-250, Server/Init/Init_Server.sqf:153,205-218,236-368,389-502
|
| Initial team-slot registration / JIP matching |
mission.sqm:3849,3868,4928, Server/Init/Init_Server.sqf:544-645, initJIPCompatible.sqf:263-271, Server/Functions/Server_OnPlayerConnected.sqf:14,21-39,65-83,95-103
|
| Initial client placement / respawn split |
Client/Init/Init_Client.sqf:12-25,515-560, Client/Functions/Client_GetRespawnAvailable.sqf:7-113, Client/Functions/Client_OnRespawnHandler.sqf:29-52
|
| Commander vote worker | Server/Functions/Server_VoteForCommander.sqf:9-57 |
| Vote restart request |
Client/GUI/GUI_Menu.sqf:75,91, Server/PVFunctions/RequestCommanderVote.sqf:3-22, Common/Init/Init_PublicVariables.sqf:12
|
| Manual reassignment path |
Client/GUI/GUI_Commander_VoteMenu.sqf:46, Server/PVFunctions/RequestNewCommander.sqf:3-16, Server/Functions/Server_AssignNewCommander.sqf:3-14
|
| Commander disconnect fallback | Server/Functions/Server_OnPlayerDisconnected.sqf:136-146 |
| Commander getters/votes |
Common/Functions/Common_GetCommanderTeam.sqf:7-12, Common/Functions/Common_SetCommanderVotes.sqf:3-10
|
| HQ getters |
Common/Functions/Common_GetSideHQ.sqf:7-12, Common/Functions/Common_GetSideHQDeployStatus.sqf:7-12
|
| Client commander/HQ watchers |
Client/Init/Init_Client.sqf:382-388,489-503, Client/FSM/updateclient.sqf:184-244
|
| HQ deploy/mobilize worker | Server/Construction/Construction_HQSite.sqf:13-104 |
| HQ killed worker | Server/Functions/Server_OnHQKilled.sqf:26-48,51-86,89-119 |
| MHQ repair worker |
Client/Action/Action_RepairMHQ.sqf:5-42, Server/Functions/Server_MHQRepair.sqf:7-79
|
| Commander economy controls |
Client/GUI/GUI_Menu_Economy.sqf:24-27,74-79,104-150, Server/FSM/updateresources.sqf:36-43
|
| HQ build/base-area authority |
Client/Module/CoIn/coin_interface.sqf:13-26,494,718, Server/PVFunctions/RequestStructure.sqf:3-21, Client/PVFunctions/RequestBaseArea.sqf:1-4, Server/FSM/basearea.sqf:46-78
|
| WASP cash HQ recovery | WASP/actions/Action_RepairMHQDepot.sqf:7-29 |
| PV/PVF registration | Common/Init/Init_PublicVariables.sqf:13,17,33,38 |
| HQ wreck marker loop | Client/FSM/updateclient.sqf:41-100 |
| Special message handlers |
Client/Functions/Client_FNC_Special.sqf:6-34,70-75, Client/PVFunctions/HandleSpecial.sqf:34, Server/Functions/Server_HandleSpecial.sqf:114-116
|
Init_Server.sqf creates each side's starting mobile HQ at the side's selected start logic position, sets WFBE_Taxi_Prohib, wfbe_side, wfbe_trashable, wfbe_structure_type = "Headquarters", killed and hit event handlers, and Chernarus-dependent west textures (Init_Server.sqf:389-403).
The same side logic then publishes the baseline state:
| Variable | Initial value | Source |
|---|---|---|
wfbe_commander |
objNull |
Init_Server.sqf:592 |
wfbe_hq |
starting MHQ object | Init_Server.sqf:593 |
wfbe_hq_deployed |
false |
Init_Server.sqf:594 |
wfbe_hq_repair_count |
1 |
Init_Server.sqf:595 |
wfbe_hq_repairing |
false |
Init_Server.sqf:596 |
wfbe_startpos |
selected side start logic position | Init_Server.sqf:597 |
wfbe_votetime |
WFBE_C_GAMEPLAY_VOTE_TIME |
Init_Server.sqf:609 |
wfbe_hqinuse |
false |
Init_Server.sqf:610 |
wfbe_basearea |
[] when base-area mode is enabled |
Init_Server.sqf:620 |
wfbe_radio_hq, wfbe_radio_hq_id
|
side radio logic and identity | Init_Server.sqf:640-652 |
This is why fresh clients can wait on side logic variables instead of rediscovering HQ state from world objects. Common_GetSideHQ.sqf and Common_GetSideHQDeployStatus.sqf are thin side-to-logic readers, not search functions (Common_GetSideHQ.sqf:7-12, Common_GetSideHQDeployStatus.sqf:7-12).
Source pass: PR #125 release command-center 78ba49d540, checked 2026-07-02. This section describes committed Chernarus behavior; local test-only overrides in other worktrees are not treated as canonical. The start-location notes below were refreshed after a BI Forum WASP thread linked one-minute East-win startup symptoms to random/start-location investigation and later called out server+HC FPS context as a replication requirement.
Initial player arrival is a staged server/client handoff, not "spawn wherever the playable unit was placed in the editor." The editor slots and temp respawn markers get the engine safely into multiplayer, but the Warfare layer chooses the real start, creates the side HQ there, registers the synced playable groups as teams, and then moves the joining client out of the holding area.
initJIPCompatible.sqf starts common constants/config and towns first, then starts Server/Init/Init_Server.sqf on the server (initJIPCompatible.sqf:252-258). Clients do not enter Init_Client.sqf immediately: they wait for WFBE_PRESENTSIDES, then wait for each present side logic to publish wfbe_teams before caching WFBE_%1TEAMS and running client init (initJIPCompatible.sqf:263-271). That wait matters because client-side group menus, join placement, commander vote UI and later JIP cleanup all assume the side team registry already exists.
The Chernarus .sqm contains many LocationLogicStart objects, side owner logics, and temp respawn markers. The important authored hints are wfbe_spawn = "north", "south" or "central" on selected start logics, plus wfbe_default tags for fallback (mission.sqm:323,4595,4684,4738). The playable west/east/resistance groups are synchronized to LocationLogicOwnerWest, LocationLogicOwnerEast and LocationLogicOwnerResistance (mission.sqm:3849,3868,4928), while WestTempRespawnMarker, EastTempRespawnMarker and GuerTempRespawnMarker are just holding/respawn marker infrastructure (mission.sqm:5031-5043).
Server start choice happens in Init_Server.sqf:
- It reads all
LocationLogicStartobjects intostartingLocations(Init_Server.sqf:168). - If
WFBE_C_BASE_START_TOWNis enabled, it refines candidates to start logics within 2000m of towns, falling back to all starts if fewer than three survive (Init_Server.sqf:205-230). The parameter default is enabled (Rsc/Parameters.hpp:153-158;Init_CommonConstants.sqf:827). -
WFBE_C_BASE_STARTING_MODEselects west-north/east-south, west-south/east-north, or random; the default is fixed north/south unless the parameter overrides it (Rsc/Parameters.hpp:159-164;Init_CommonConstants.sqf:828;Init_Server.sqf:390-430). In three-way mode the fixed north/south shortcut is skipped and random placement is used. - Random placement must satisfy the side spacing check and the egress-quality gate: at least 400m from Chernarus map edges, roads within 250m, and on OA at least
WFBE_C_BASE_MIN_EGRESS_ROADSusable road segments whereroadsConnectedToreturns two or more connections. Current PR #125 sets that minimum to2, not the older3, and degrades safely to any nearby road on vanilla A2 (Init_CommonConstants.sqf:832-834;Init_Server.sqf:313-346). - The current random loop explicitly keeps GUER out of the base-pair placement loop because GUER is base-less/harass-only; this prevents random mode from running to the 2000-attempt fallback just because resistance slots are present (
Init_Server.sqf:304). If random placement cannot settle within 2000 attempts, the fallback still uses.sqmwfbe_defaultwest/east tags, or random remaining starts if the defaults are missing (Init_Server.sqf:497-535).
For the committed Chernarus Combined Ops setup, common constants pick USMC for west and RU for east (Init_CommonConstants.sqf:610-626). Those roots compile side structure config, giving west LAV25_HQ / LAV25_HQ_unfolded and east BTR90_HQ / BTR90_HQ_unfolded (Structures_USMC.sqf:6-7,127; Structures_RU.sqf:6-7,127).
During global side initialization, the server passes the selected start logic position into WFBE_CO_FNC_CreateVehicle, stores the returned object as wfbe_hq, and publishes wfbe_startpos on the side logic (Init_Server.sqf:378-437). Common_CreateVehicle.sqf is the shared wrapper over the engine createVehicle command: it normalizes object positions/side IDs, creates the vehicle, applies direction/lock/bounty handlers, and uses setVehicleInit plus processInitCommands for global unit initialization when requested (Common_CreateVehicle.sqf:15-24,39-73).
After the MHQ is created, the server spawns configured starting vehicles near it. Current Chernarus roots give west HMMWV_Ambulance and Pandur2_ACR, east GAZ_Vodnik_MedEvac and BTR90 (Root_US_Camo.sqf:44; Root_RU.sqf:41), then Init_Server.sqf places and cargo-clears them beside the HQ (Init_Server.sqf:494-502). WASP also runs Wasp/unsort/StartVeh.sqf and creates one random side-specific extra starting vehicle near the HQ before team registration (Init_Server.sqf:506-542).
The initial west/east "teams" are editor-created groups, not newly spawned groups. For each present side, the server loops synchronizedObjects _logik, takes each synced man object's group, pushes that group into _teams, seeds funds, side, persistence, queue, vote, autonomy, respawn, team type and default move mode, then publishes wfbe_teams and wfbe_teams_count on the side logic (Init_Server.sqf:544-580).
Resistance player slots are gated separately. If WFBE_C_GUER_PLAYERSIDE > 0, the server registers synced resistance groups as harass-only GUER teams with 50k funds and starts Server_GuerStipend.sqf (Init_Server.sqf:584-616; Rsc/Parameters.hpp:586-592). With the default gate off, the synced GUER playable units are deleted server-side so clients cannot join a non-functional insurgent side (Init_Server.sqf:618-627). After registration, all still-untagged west/east/resistance editor groups are tagged wfbe_group_src = "editor-player-slot" for group-GC/audit visibility; this is audit state, not the mechanism that registers teams (Init_Server.sqf:629-645).
JIP player matching later depends on this registry. Server_OnPlayerConnected.sqf waits for commonInitComplete && serverInitFull, searches playableUnits for the joining UID, reads that unit's group, verifies wfbe_side, stores wfbe_uid / wfbe_teamleader, and seeds or restores WFBE_JIP_USER<uid> / wfbe_funds (Server_OnPlayerConnected.sqf:14,21-39,65-83,95-103). If team registration is broken, JIP symptoms often show up here rather than at the original server init line.
The player's first engine position is still the side's temp respawn/holding area. Init_Client.sqf immediately disables damage while the player is in that transit state, then a watchdog re-enables it once WFBE_Client_DeadspawnEscaped is set or after a 120-second timeout (Init_Client.sqf:12-25). The server also surrounds the three temp respawn markers with H-barriers after serverInitFull so side-slot bodies cannot shoot across the holding markers while clients are still joining (Init_Server.sqf:649-657).
Once the join gate has passed, client init performs an interim move to wfbe_startpos if available, then determines the final initial placement (Init_Client.sqf:515-560):
- resistance clients use a friendly/neutral town if possible, falling back to the GUER temp marker;
- west/east clients during the first 30 seconds use
wfbe_startpos; - later west/east joiners prefer the current side HQ, then scan side structures backward and use the newest live Barracks, Light, Heavy or Aircraft factory when one exists;
- if no live factory exists and the HQ object is null/dead, the client falls back to
wfbe_startpos.
That final setPos sets WFBE_Client_DeadspawnEscaped = true, which lets the damage watchdog restore normal damage shortly after (Init_Client.sqf:558-560).
Do not conflate the above client init placement with the later respawn menu. Client_GetRespawnAvailable.sqf builds a respawn list from HQ/factories, mobile respawn vehicles, redeploy trucks, leader respawn, three-way/defender special respawn, camps and GUER friendly/neutral towns (Client_GetRespawnAvailable.sqf:7-113). Client_OnRespawnHandler.sqf then either moves the player into cargo for eligible mobile/redeploy spawns or positions them near the selected spawn/town (Client_OnRespawnHandler.sqf:29-52). A bug in first-join deadspawn handling and a bug in later respawn availability can look similar in play, but they are different code paths.
- Start-placement changes: smoke
WFBE_C_BASE_START_TOWNon/off, start mode 0/1/2, north/south tag absence, the 2000-attempt fallback, and the edge/road egress gate. - HQ type or starting vehicle changes: verify
WFBE_%1MHQNAME,WFBE_%1STARTINGVEHICLES,Common_CreateVehicleglobal init and side-specificPlaceNearbehavior. - Slot/team changes: verify editor sync to side owner logics,
wfbe_teams_count, commander vote rows,Server_OnPlayerConnectedUID matching and JIP reconnect funds. - Deadspawn changes: smoke launch join, mid-game JIP after factories exist, JIP after HQ death, and the 120-second damage watchdog timeout.
- Respawn changes: smoke the respawn menu separately from first join, especially mobile/redeploy cargo and GUER town selection.
Relevant BI command references for this flow: createVehicle, createUnit, setVehicleInit, processInitCommands, nearRoads, roadsConnectedTo, setPos, moveInCargo. Check each page's game-version icons/caveats before applying newer-engine behavior to Arma 2 OA.
At the end of server init, every present side starts WFBE_SE_FNC_VoteForCommander (Init_Server.sqf:1060). The worker:
- reads the side's vote time (
Server_VoteForCommander.sqf:9-11); - counts down
wfbe_votetimeonce per second and broadcasts it on side logic (:13-14); - counts player-group
wfbe_votevalues fromwfbe_teams(:17-29); - resolves ties and AI/no-commander votes (
:31-46); - sets
wfbe_commanderto the selected player group orobjNullfor AI/no commander (:48-49); - sends
HandleSpecial ["commander-vote", _commander]to side clients (:51-52); - stops any running AI commander flag when a player commander is selected (
:54-57).
Common_SetCommanderVotes.sqf is a helper that sets every team vote to a provided value (Common_SetCommanderVotes.sqf:3-10). It does not decide the winner.
The vote winner condition is branch-sensitive. Current stable/B74.1 origin/master@f8a76de34, B74.2 origin/claude/b74.2-aicom@21b62b04, B69 origin/claude/b69@8d465fce and B74 origin/claude/b74-aicom-spend@b23f557f count wfbe_vote == -1 as AI/no-commander votes (Server_VoteForCommander.sqf:18,26-27) and assign a player only when _highest >= _aiVotes at :43; the checked current-stable..B74.2, d472da6a..21b62b04 and B69..B74 vote-worker/preview diffs are empty. Docs/source HEAD@e0d82714, current Miksuu b8389e748243, perf 0076040f, historical release a96fdda2 and historical AI-commander c20ce153 still use the old tautology at :43, so any non-tied player candidate with _highestTeam != -1 can be selected there. The client vote dialog still previews AI/no commander when the highest option is not above half of player voters or when row 0 wins (GUI_VoteMenu.sqf:87-89), so even current stable/B74.1/B74.2/B69/B74 need UI/policy smoke. Use Commander vote/reassignment for the policy decision, patch order and smoke matrix.
There is also a client-triggered vote restart path. If the main menu sees wfbe_votetime <= 0, it sends RequestCommanderVote with [sideJoined, name player] (GUI_Menu.sqf:75,91). The server handler rechecks side logic vote time, resets team votes around the current commander team, spawns VoteForCommander, sends the side message and broadcasts commander-vote-start with the provided name (RequestCommanderVote.sqf:3-22). This is useful for recovery, but the handler does not prove requester identity beyond the payload, so keep it in commander-authority smoke when changing vote behavior.
The vote UI refresh loops also have an inclusive-bound edge. WFBE_Client_Teams_Count is set to count WFBE_Client_Teams (Init_Client.sqf:273), but both GUI_Commander_VoteMenu.sqf:58-66 and GUI_VoteMenu.sqf:29,61-66 loop from 0 to WFBE_Client_Teams_Count, which reaches one index past the array. Existing isNil guards reduce the blast radius, but this is still a source-level cleanup candidate for vote-menu polish.
This atlas only anchors the HQ lifecycle boundary. The patch matrix and generated-mission propagation notes live on Commander reassignment call shape, while vote-policy ordering and smoke live on Commander vote/reassignment. Current docs head HEAD@1f07b39d has no targeted reassignment-source drift from 60c35c05; the stable/B74-shaped maintained-root helper fix is not reassignment closure because duplicate notification ownership, visible-name UI targeting, requester authority and modded fork propagation remain open.
| Step | Local source anchor | Route |
|---|---|---|
| Commander UI sends the request |
GUI_Commander_VoteMenu.sqf:33-46 stores row team ids but resolves the selected commander by visible leader-name text before sending ["RequestNewCommander", [side group player, _voted_commander]]. |
Commander reassignment call shape |
| Server PVF mutates commander state |
RequestNewCommander.sqf:3-16 reads side/candidate, accepts only after wfbe_votetime <= 0, sets wfbe_commander, spawns AssignNewCommander and sends new-commander-assigned. |
Commander vote/reassignment |
| Helper remains branch-split | Docs/source still uses _side = _this while also reading _this select 1 (Server_AssignNewCommander.sqf:3-5); current stable/B74.1/B74.2/B69/B74 plus Miksuu/perf/release/AI refs unpack _this select 0 / _this select 1 but leave duplicate notification sender shape. |
Current branch matrix |
| Client displays the outcome |
Client_FNC_Special.sqf:6-34 shows commander vote/reassignment messages and locally mirrors wfbe_commander = objNull for null reassignment. |
Client UI systems |
Keep vote semantics, helper unpacking, notification ownership, UI row identity and requester authority as separate claims. Stable/release helper unpacking alone is not evidence that manual reassignment, duplicate-message behavior or commander authority is fixed.
GUI_Menu_Economy.sqf gives commanders income-percent, structure sell and supply-truck respawn controls. The income-percent control updates side/group state from the client (GUI_Menu_Economy.sqf:24-27,74-79), and the server resource updater later consumes that value (Server/FSM/updateresources.sqf:36-43). Structure sale/refund logic is also commander-facing UI work (GUI_Menu_Economy.sqf:104-150) rather than a fully server-derived economy transaction.
These controls are live and useful, but they belong to the same server-authority migration class as upgrades, construction, side supply and MHQ repair. Do not treat them as AI commander autonomy work unless the owner explicitly decides to redesign commander economy behavior at the same time.
Init_Client.sqf waits for wfbe_commander and then starts the main updateclient.sqf loop (Init_Client.sqf:382-388). That loop polls the side's commander team each tick (updateclient.sqf:184), detects changes, and updates the local player's UI/action state.
When the local player becomes commander:
- the current side HQ/MHQ gets lock/unlock actions (
updateclient.sqf:210-213); - CoIn is initialized in deployed or undeployed mode depending on
wfbe_hq_deployed(:214-219); - the commander build action
HQActionis attached to the player with thehqInRange && canBuildWHQcondition (:220); - title/hint/sound feedback is emitted (
:221-225); - a heavy attack action is lazily attached to the side HQ if side supply is at least
25000(:234-244).
When commander status is lost, the loop removes MHQ actions 0-3, removes HQAction, clears HC groups and disables team autonomy (updateclient.sqf:196-205,226-229). This action-removal path is position/index-sensitive; changes to HQ/MHQ actions should be smoked in commander handoff, respawn and JIP flows.
Commander disconnect is handled server-side by clearing, not reassignment. Server_OnPlayerDisconnected.sqf:136-146 checks whether the disconnecting team is the current commander team, sets side logic wfbe_commander = objNull, sends CommanderDisconnected, and clears team autonomy/respawn overrides. No VoteForCommander, RequestNewCommander or AssignNewCommander call appears in that disconnect block, so automatic replacement is not proven in current source. Treat auto-reassign/vote restart as a separate owner decision rather than assuming the AI commander or vote system takes over.
HQ deployment/mobilization is a special CoIn structure flow handled by Construction_HQSite.sqf.
The worker first serializes HQ swaps with wfbe_hqinuse (Construction_HQSite.sqf:13-15) and reads the current HQ object and deployed state (:17-18).
When deploying an undeployed MHQ:
- the old MHQ is moved away (
:20-21); - the deployed HQ structure is created, positioned, assigned
wfbe_sideandwfbe_structure_type = "Headquarters"(:23-27); - side logic broadcasts
wfbe_hq_deployed = trueandwfbe_hq = _site(:29-30); - client base-structure init is pushed with
setVehicleInit(:32-33); - side messages and killed/hit/handleDamage handlers are attached (
:35-38); - base-area logic may be created and sent to clients through
RequestBaseArea(:40-59); - the old mobile HQ is deleted (
:64).
When mobilizing a deployed HQ:
- the deployed HQ position/direction are preserved (
:66-68); - a new side-specific MHQ vehicle is created (
:72); - taxi/trash/side/type variables and hit/killed handlers are attached (
:73-89); - side logic broadcasts
wfbe_hq = _MHQandwfbe_hq_deployed = false(:79-80); - clients receive
HandleSpecial ["set-hq-killed-eh", _mhq]so non-server clients attach a killed event handler (:91); - the old deployed structure is deleted (
:97); -
wfbe_hqinuseis released (:103-104).
Base-area creation is unusual: the server creates the LocationLogicStart, but the actual avail, side and wfbe_basearea update is done by client-bound RequestBaseArea.sqf (RequestBaseArea.sqf:1-4). Treat base-area accounting as multiplayer-sensitive until it is proven under JIP and hostile clients.
The base-area limit itself is also only proven as a local client affordance at deploy time. coin_interface.sqf:13-26 reads the client's wfbe_basearea array to decide whether HQ deploy/build controls are allowed, while Server/FSM/basearea.sqf:46-78 later prunes invalid area logics. That later cleanup is useful housekeeping, but it is not a server-side veto for a forged or stale deploy/build request.
AI commander MHQ relocation is a separate server-side automation layer on top of the same deploy/mobilize worker. Current stable/B74.1, current B74.2 and maintained Vanilla already call WFBE_SE_FNC_AI_Com_MHQReloc; B74.5 source Chernarus only adds an abort-cooldown retune around repeated advance-below-min / no-buffer-clear-standoff evaluations and a new redundant-structure sell worker that skips while wfbe_mhqreloc_active. Keep commander/HQ correctness, CoIn authority and AICOM soak tests separate unless a code owner deliberately changes the shared HQ deploy/mobilize contract.
HQ death is handled by Server_OnHQKilled.sqf. If the destroyed object was a deployed HQ, the server creates a dead MHQ object at the structure position, marks it damaged, flips wfbe_hq_deployed = false, updates wfbe_hq to the wreck, deletes the deployed-HQ shield walls and schedules deletion of the deployed structure (Server_OnHQKilled.sqf:26-48).
The same worker awards score/bounty messages (:47-81 on docs/source; line drift is named in the branch matrix) and publishes allied-only HQ wreck marker state:
| Variable | Meaning | Source |
|---|---|---|
IS_WEST_HQ_ALIVE / IS_EAST_HQ_ALIVE
|
Whether allied clients should delete or show wreck marker. |
Server_OnHQKilled.sqf:104-119, Server_MHQRepair.sqf:60-76
|
HQ_WEST_MARKER_INFOS / HQ_EAST_MARKER_INFOS
|
Marker name, position, type, text, color, side and tracked wreck object. | Server_OnHQKilled.sqf:89-119 |
updateclient.sqf polls these missionNamespace variables every client update tick. West clients delete HQ_WRECK_WEST when alive, otherwise update the local marker against the tracked HQ wreck object (updateclient.sqf:41-69). East clients do the equivalent for HQ_WRECK_EAST (:72-100). The server intentionally does not create a global marker because enemies should not see allied HQ wrecks (Server_OnHQKilled.sqf:89-99).
DR-50 remains branch-unrescued after the 2026-06-23 current-B74.1 refresh. Every checked current maintained-root target still sets _points = 30000 / 100 * WFBE_C_BUILDINGS_SCORE_COEF, awards that generic HQ building score regardless of teamkill, then awards _score = 900 again under the non-teamkill guard. The coefficient is still 3, so a clean enemy HQ kill pays 900 + 900 = 1800; a friendly/teamkill HQ kill still gets the generic 900.
Do not treat Miksuu score/HQ/bounty branch names as fixes without file-level proof. The same-day upstream scan found older one-award ancestry, but current Miksuu master@b8389e748243 still has the double-award shape in both maintained roots. f17445c15 and b31539b46 are ancestors of current Miksuu; later folder-structure work such as 96809ac35 moved a generic _points award into the current mission layout, so ancestry alone is not a DR-50 rescue.
| Ref / root | Evidence | Status |
|---|---|---|
Docs/source HEAD@c2d513ecb Chernarus + maintained Vanilla |
Server/Functions/Server_OnHQKilled.sqf:23,47,49,75,78,81; Common/Init/Init_CommonConstants.sqf:356. Checked HQ-kill score paths are source-unchanged from prior docs 9b7eb4bc / 97e4cdd0 / 4d4610f1. |
Double-award present in both maintained roots. |
Current stable/B74.1 origin/master@f8a76de34 and origin/claude/b74.1-aicom@f8a76de34 Chernarus + maintained Vanilla |
Server/Functions/Server_OnHQKilled.sqf:23,64,66,106,109,112; coefficient line drift is Chernarus Common/Init/Init_CommonConstants.sqf:753 and maintained Vanilla :555. B74..B74.1 changes only Chernarus constants among checked HQ-score files. |
Double-award present in both maintained roots; B74.1/current master is not a DR-50 scoring fix. |
Current B69 origin/claude/b69@8d465fce and B74 origin/claude/b74-aicom-spend@b23f557f Chernarus + maintained Vanilla |
B69..B74 has no Server_OnHQKilled.sqf delta. Both keep Server/Functions/Server_OnHQKilled.sqf:23,64,66,106,109,112; coefficient line drift is B69 Chernarus Common/Init/Init_CommonConstants.sqf:721, B74 Chernarus :734, and B69/B74 maintained Vanilla :555. Both also have base-fall smoke/sting code at Server_OnHQKilled.sqf:57,103. |
Double-award still present in both maintained roots; B69/B74 spectacle code and Chernarus constants drift are not DR-50 scoring fixes. |
Current Miksuu b8389e748243
|
Server_OnHQKilled.sqf:23,47,49,75,78,81; coefficient at Init_CommonConstants.sqf:356. Verified direct upstream master still resolves to b8389e748243 on 2026-06-23. |
Double-award present in both maintained roots. |
origin/perf/quick-wins@0076040f |
Same two-award shape at Server_OnHQKilled.sqf:23,47,49,75,78,81; coefficient at Init_CommonConstants.sqf:356. |
Not fixed by perf branch. |
Historical release commit a96fdda2
|
Same two-award shape at Server_OnHQKilled.sqf:23,52,54,80,83,86; coefficient at Init_CommonConstants.sqf:372. Current origin exposes no live release/*, feat/*hq*, feat/*score*, feat/*bounty* or feat/*base* heads on 2026-06-23; broad B74/commander matches are AI-commander context/log branches, not HQ-score rescue heads. |
Historical evidence only; no current release head to treat as a rescue branch. |
| Historical Miksuu one-award ancestors |
miksuu/ScoreForKillingFactories@f17445c15190, miksuu/Fix0ScoreBountyBug@415615c9662a, miksuu/FixNukeMoneyGain@2ad3a7d38837 and miksuu/TakistanNukeSoundFileMissing@f3eae47a24ad share the older handler blob 12d33a8f87ee: no _points, one _score = 900, and the award inside the non-teamkill guard. These branches use the old Chernarus plus old Missions/[61-2hc]...takistan layout, not the current Missions_Vanilla/[61-2hc]... maintained root. |
Useful provenance only; not a current maintained-root rescue. |
| Miksuu branch-only one-award current-layout evidence |
miksuu/AntiHQTeamkillDisabledInDebugMode@5bafe566951a has current Missions_Vanilla layout and one-award/non-teamkill-guard shape. Adjacent branch blobs such as 5aeea270e25f and bbfc46060f8a carry similar branch-only one-award handlers. |
Branch-only evidence; current Miksuu master does not contain it, so DR-50 remains open. |
| Miksuu bounty tune / non-fix branches |
miksuu/BountyModifierTo4@cc127ef40b4d has no _score = 900 and no _points in Server_OnHQKilled.sqf, so it predates the HQ score award rather than fixing the double-award. 96809ac35 is the relevant folder-structure history point for the current generic _points award shape. |
Branch names are search leads only; file-level handler proof decides fix status. |
Patch shape: keep a single non-teamkill HQ score award, make friendly/teamkill HQ destruction award zero score, propagate maintained Vanilla, then smoke enemy HQ kill, friendly HQ teamkill and DR-20 idempotency/replayed-HQ-kill interactions.
Marker cleanup has two follow-up risks. Server_MHQRepair.sqf:56 calls the client marker helper during repair, but Client_Delete_Marker.sqf:24-25 comments deleteMarkerLocal while executing deleteMarker, so side-local cleanup semantics need smoke. Also, the dead-state marker branch only updates while the tracked wreck object is non-null; if the wreck disappears first, Common_UpdateMarker.sqf:25 exits on null object instead of deleting the stale marker.
Mobile HQ killed event handling is mixed-locality. The server attaches its own killed EH when it creates HQ/MHQ objects, and also asks clients to attach RequestSpecial ["process-killed-hq", _this] for mobile HQ kills because the killed EH can fire locally (Construction_HQSite.sqf:89-93, Server_MHQRepair.sqf:37-43, Client/PVFunctions/HandleSpecial.sqf:34, Init_Client.sqf:499-503). The server receives that forwarded event through Server_HandleSpecial.sqf:114-116.
The normal repair-truck action is client-led before it reaches the server:
- client requires the HQ to be dead and within 30m of the repair vehicle (
Action_RepairMHQ.sqf:5-6); - client checks
wfbe_hq_repairing, repair count/price and currency (:8-27); - client debits side supply or player funds (
:29-33); - client sends
RequestMHQRepairwith onlysideJoined(:35); - client flips local repair flags/count (
:37-40).
The server worker creates a fresh MHQ at the wreck position, sets side/type/trash/taxi variables and event handlers, updates wfbe_hq, wfbe_hq_deployed = false, wfbe_hq_repairing = false, increments wfbe_hq_repair_count, sends commander lock state, broadcasts a mobilized side message, deletes the wreck, clears allied wreck markers and logs the repair (Server_MHQRepair.sqf:7-79).
This is functionally coherent for honest clients, but authority-light: the server receives only the side, not the requester/repair vehicle/payment context. The Server authority migration map already tracks this as part of the construction/economy authority class.
The repair worker also lacks a server-side duplicate-entry guard before setting wfbe_hq_repairing inside Server_MHQRepair.sqf:23. The client actions check wfbe_hq_repairing locally (Action_RepairMHQ.sqf:8-9; WASP/actions/Action_RepairMHQDepot.sqf:10-11), but two near-simultaneous requests can still enter the side-only server worker unless the future hardening patch rechecks and sets the mutex before creating the replacement MHQ.
origin/claude/upstream-hq-repair-price@440be3da0bda is a branch-only MHQ repair price/action-label candidate, not current stable behavior and not a server-authority fix. Its merge-base with current stable is be2bbd084, an ancestor of origin/master@f8a76de34; direct diffs against current stable also include unrelated B74.1 Init_CommonConstants.sqf:914-920 player-stats drift, so any port must preserve WFBE_C_STATS_ENABLED = true.
| Ref | Evidence | Status |
|---|---|---|
Current stable origin/master@f8a76de34
|
Source Chernarus and maintained Vanilla still register the repair-truck action as plain localize 'STR_WF_Repair_MHQ' at Common/Init/Init_Unit.sqf:67; Action_RepairMHQ.sqf:42 hints STR_WF_INFO_Repair_MHQ_Repair without a next-price argument. The client-side repair prices are still 25000 / 40000 / 50000 at Chernarus Common/Init/Init_CommonConstants.sqf:465-467 and maintained Vanilla :287-289; the client still debits and sends only sideJoined at Action_RepairMHQ.sqf:24-35, while RequestMHQRepair.sqf:1 forwards that to Server_MHQRepair.sqf:7-79. |
Current stable has the old label/hint shape and the same authority-light MHQ repair boundary. |
origin/claude/upstream-hq-repair-price@440be3da0bda |
Against merge-base be2bbd084, payload is six files / +76 / -26 and git diff --check is clean. In both maintained roots, Init_Unit.sqf:71-78 formats the repair-truck action label with the spawn-time next price, Action_RepairMHQ.sqf:43-55 formats the post-repair hint with the live next price or -, and stringtable.xml:940-945 plus Chernarus :4592-4597 / Vanilla :4591-4596 add %1 to the repair hint/action strings. There is no branch payload under Server/, RequestMHQRepair.sqf or Init_PublicVariables.sqf. |
Branch-only UI/economy candidate. Review repair-count semantics before promotion: the inherited Action_RepairMHQ.sqf:22 cap check exits when the current price equals WFBE_C_BASE_HQ_REPAIR_PRICE_3RD, so the branch can display the third-price slot as a next price after the second repair even though the next attempt may hit STR_WF_INFO_MHQ_Repairs_Used. Smoke labels, insufficient funds, first/second/third-attempt messaging, side-supply vs player-funds mode and maintained Vanilla parity. |
The explicit alive/dead HQ marker broadcasts and client update branches are west/east only. Resistance HQ recovery is therefore not covered by this marker state machine (Server_OnHQKilled.sqf:104, Server_MHQRepair.sqf:60, updateclient.sqf:42).
WASP/actions/Action_RepairMHQDepot.sqf is a separate live WASP scroll action for commander-style cash recovery. It checks dead HQ and one-time cashrepaired, debits player funds, sends RequestMHQRepair, sets cashrepaired, moves the wreck above the player, and resets all friendly town supplyvalue to 10 client-side (Action_RepairMHQDepot.sqf:7-29).
This is not just "another repair UI." It mutates economy/town state and HQ positioning locally before the server repair path runs. Treat it as a server-authority migration lane before adding any new HQ recovery, paradrop or comeback mechanic.
| Status | Risk | Evidence | Next owner action |
|---|---|---|---|
| Branch-split commander vote correctness | Current stable/B74.1/B74.2/B69/B74 fixed the server tautology to _highest >= _aiVotes, but UI preview/policy smoke remains open; docs/source/Miksuu/perf/historical refs still ignore AI/no-commander vote count when there is a non-tied player candidate. |
Current stable/B74.1/B74.2/B69/B74 Server_VoteForCommander.sqf:18,26-27,43; old-shape refs :43; GUI_VoteMenu.sqf:87-89
|
Decide intended tie/AI/no-commander semantics, align preview/server behavior, and smoke player-majority, no-commander-majority, equal-vote and tie cases on the exact target branch. |
| Branch-split correctness | Current docs head manual commander reassignment helper still passes an array as _side; current stable/B74.1/B74.2/B69/B74 plus Miksuu/perf/historical fixed refs fix helper unpacking but keep duplicate notification senders. |
RequestNewCommander.sqf:13-14; docs Server_AssignNewCommander.sqf:3-5,9; fixed-helper refs Server_AssignNewCommander.sqf:4-5,10
|
Patch/port via Commander reassignment call shape, choose one notification owner, then smoke one client notification. |
| Authority-light | Normal MHQ repair is client-debited and sends only side to server. |
Action_RepairMHQ.sqf:24-35; RequestMHQRepair.sqf:1; Server_MHQRepair.sqf:7-79
|
Server should validate requester, side, dead HQ, repair vehicle range, repair count and funds before creating the MHQ. |
| Race risk | MHQ repair uses local client locks, but the server worker does not reject duplicate in-flight repair requests before setting wfbe_hq_repairing. |
Action_RepairMHQ.sqf:8-9; WASP/actions/Action_RepairMHQDepot.sqf:10-11; Server_MHQRepair.sqf:23-57
|
Add a server mutex check/set around the first side-logic read and smoke two rapid repair requests against one wreck. |
| Partial fallback | Commander disconnect clears wfbe_commander and warns the side, but does not prove automatic reassignment. |
Server_OnPlayerDisconnected.sqf:136-146; Server_VoteForCommander.sqf:48-57
|
Decide whether disconnect should leave no commander, restart a vote, or restore AI commander behavior; smoke human commander disconnect and reconnect. |
| Authority-light | Commander income percent is client-written and server-consumed. |
GUI_Menu_Economy.sqf:24-27,74-79; updateresources.sqf:36-43
|
Server should accept percent changes only from the current commander team and clamp the configured range. |
| Authority-light | Commander structure sell/refund is driven from Economy UI. | GUI_Menu_Economy.sqf:104-150 |
Move ownership, side, refund and destruction checks server-side before expanding sell/recovery mechanics. |
| Authority-light/high impact | WASP cash HQ recovery moves the wreck and resets town SV client-side. | WASP/actions/Action_RepairMHQDepot.sqf:19-29 |
Move one-time flag, funds debit, HQ recovery position and town-SV side effects to a server-owned request. |
| Mixed locality | Mobile-HQ killed EH can be forwarded by clients through RequestSpecial. |
Client/PVFunctions/HandleSpecial.sqf:34; Server_HandleSpecial.sqf:114-116
|
If hardening RequestSpecial, preserve legitimate HQ-kill forwarding while rejecting forged/malformed payloads. |
| Patch-ready scoring correctness | HQ kill score is awarded once through the generic building score path and again through the HQ bounty path; teamkills still get the generic award. | HQ kill score and bounty branch matrix | Keep one non-teamkill score award, zero teamkill score, propagate maintained Vanilla and smoke enemy/friendly HQ kills plus DR-20 idempotency. |
| JIP-sensitive | HQ wreck markers are local client markers derived from server-published marker arrays and object refs. |
Server_OnHQKilled.sqf:89-119; updateclient.sqf:41-100
|
Smoke late join after HQ kill, repaired HQ marker deletion, and moved wreck marker updates. |
| Cleanup risk | HQ wreck marker deletion/helper behavior mixes side-local intent with deleteMarker, and null wreck objects can leave stale markers. |
Server_MHQRepair.sqf:56; Client_Delete_Marker.sqf:24-25; Common_UpdateMarker.sqf:25
|
Verify marker removal after repair and after wreck deletion; prefer local deletion for side-local markers if source smoke confirms intent. |
| Side coverage gap | HQ alive/dead marker broadcasts cover west/east, not resistance. |
Server_OnHQKilled.sqf:104; Server_MHQRepair.sqf:60; updateclient.sqf:42-100
|
Keep resistance HQ/economy disabled or design a full three-side marker state machine before enabling resistance HQ recovery. |
| Multiplayer-sensitive | Base-area accounting is updated via client-bound RequestBaseArea, while deploy/build limits are first enforced through local client state. |
coin_interface.sqf:13-26; Construction_HQSite.sqf:54-59; RequestBaseArea.sqf:1-4; basearea.sqf:46-78
|
Audit before changing defense availability, base area limits or server authority around CoIn; server should be able to reject stale or forged area/build requests. |
| Partial/latent | AI commander variable state exists, but full autonomous commander ownership is not proven. |
wfbe_commander = objNull; Server_VoteForCommander.sqf:48-57; AI commander autonomy audit
|
Keep AI commander revival separate from commander/HQ correctness patches. |
| Partial UI/order feature | Repo docs branch HEAD@c5937045f, Miksuu, perf and historical c20ce153 Commander Set Task UI build task data and play HQ speech, but maintained-root SetTask sends are commented while Client/PVFunctions/SetTask.sqf still creates CommanderOrder if invoked. Current stable/B74.1 origin/master@f8a76de34, current B74.2 origin/claude/b74.2-aicom@21b62b04, B69 origin/claude/b69@8d465fce, B74 origin/claude/b74-aicom-spend@b23f557f and origin/feat/naval-hvt-objectives@2e1c59317186 re-enable targeted/client-bound sends as "Objective Ping" in both maintained roots, but old town TaskSystem remains disabled/separate and its helper file is absent on those current-stable-shaped refs. |
Docs GUI_Menu_Command.sqf:315-344; docs Client/PVFunctions/SetTask.sqf:8-14; docs Common/Init/Init_PublicVariables.sqf:33; current stable/B74.1/B74.2/B69/B74/naval-HVT GUI_Menu_Command.sqf:336,344 and Common/Init/Init_PublicVariables.sqf:40; historical a96fdda2 Init_PublicVariables.sqf:36; docs Init_Client.sqf:75,744; current stable/B74.1/B69/B74 Init_Client.sqf:119,1000; current B74.2 Chernarus Init_Client.sqf:119,1023, Vanilla :119,1000
|
Hide the old-shape docs/Miksuu/perf affordance or deliberately port the current-stable Objective Ping shape with server/JIP/task-spam smoke; do not confuse it with revival of the old town TaskSystem. |
| HQ-specific construction authority | CoIn sends HQ/structure requests from the client; the server RequestStructure handler accepts side/class/position/direction and executes construction, while Construction_HQSite toggles deployed/mobile HQ state. |
coin_interface.sqf:494,718; RequestStructure.sqf:3-21; Construction_HQSite.sqf:17-23,80
|
When hardening construction, include HQ-specific commander/range/role checks instead of treating HQ deploy/pack as only a generic building purchase. |
- Do not infer HQ state by nearest-object searches when side-logic state is available.
- Keep
wfbe_hqandwfbe_hq_deployedupdates server-owned and globally broadcast. - Preserve client-side CoIn refresh after deploy/mobilize and commander reassignment.
- When hardening
RequestSpecial, preserveprocess-killed-hq's legitimate locality bridge but validate payload shape and object side. - Do not merge WASP cash HQ recovery into normal repair without owner approval; it has extra economy/town side effects.
- After any HQ lifecycle patch, run a JIP-oriented smoke: join after boot, deploy HQ, mobilize HQ, destroy deployed HQ, destroy mobile HQ, repair HQ, change commander, and verify markers/actions on both sides.
Previous: Towns, camps and capture atlas | Next: Construction and CoIn systems
Main map: Home | Authority map: Server authority migration map | PV map: Public variable channel index
Home | Agent Guide | Current live state | Release 1.2.2 (B91) | Quickstart | Progress | Lifecycle wait-chain | Join/disconnect | Parameters/build | Assets/config | SQF atlas | PV index | Modules | Support/specials | Commander/HQ | Commander vote/reassign | Construction/CoIn | Construction cleanup | WDDM compositions | Factory/purchase | Upgrades/research | Towns/camps/capture | Victory/endgame | Markers/cleanup | Server runtime | AI runtime/HC | AI commander audit | HC delegation | Town AI safety | Commander reassignment | Resistance supply | Player UI workflow | UI atlas | Respawn/death | Gear template filter | Vehicle cargo loop | Service guards | UI IDD repair | UI design inspiration | WASP overlay | Feature status | Source propagation | release readiness | Tooling readiness | Integration trust | AntiStack DB | Owner decisions | Shelved registry | Abandoned feature revival | Hardening roadmap | PVF dispatch | Server authority | ICBM authority | Attack-wave authority | Telemetry families | AICOM V2 cutover | Consumer port map | Testing workflow | Server ops | Web tools | Ecosystem repos | Arma 2 OA refs | A2 traps | OA compatibility audit | Coverage ledger | Navigation inventory | Pruning ledger | Knowledge roadmap | Agent context | Collab protocol | Worklog | Audit archive 2026-07 | Briefing reference | Utes invasion concept
- Shelved AICOM concepts - revivable someday ideas (owner-shelved 2026-07-03)
Docs rule: source-backed claims only; Arma 2 OA scripting docs only; gameplay edits start in Missions/[55-2hc]warfarev2_073v48co.chernarus.
- Getting started
- Status and coordination
- Agent context
- Agent collaboration protocol
- Agent worklog
- Agent worklog archive
- Progress dashboard
- PR cleanup and integration lab
- Shelved PR #169: gear price double-count
- Shelved PR #194: Chernarus no-trees
- Coordination board
- Codebase coverage ledger
- Bottleneck removal queue
- Current source status
- Wiki mirror reconciliation
- Navigation inventory
- Registers
- Agent orchestration
- Architecture
- Architecture overview
- Mission entrypoints and lifecycle
- Lifecycle wait chain
- Player join/disconnect and AntiStack lifecycle
- Mission parameters/localization/build inputs
- Stringtable localization key-family catalog
- Source inventory
- Content structure and maps
- Assets/config/localization/parameters
- Mission start parameters index
- Code and networking
- Gameplay systems
- Core systems index
- Gameplay systems atlas
- Commander/HQ lifecycle atlas
- Economy, towns and supply
- Economy system reference
- Balance asymmetries
- Anti-stack skill-balance mechanic
- Empty-side supply income stagnation
- Towns, camps and capture atlas
- Victory and endgame atlas
- Victory conditions reference
- Territorial victory reference
- Marker cleanup and restoration
- Marker loop engine and registries
- Map marker families content catalog
- Marker subsystem function reference
- Client marker FSM updater map
- Support specials and tactical modules
- SCUD TEL tactical munitions
- Naval HVT objectives (carriers/SCUD)
- SCUD saturation strike mechanic
- Takistan airfield FPV drone design
- Construction and CoIn systems
- Structure damage reduction & friendly-fire
- Construction logic list cleanup
- Flak tower & WDDM anchor compositions
- Resistance supply scaffold
- GUER Insurgents faction overview
- GUER Insurgents branch audit
- GUER insurgent player economy
- GUER Commissar Panel
- GUER air-defense loop (Ka-137/Mi-24)
- Upgrades and research atlas
- Supply mission architecture
- Supply mission authority cleanup
- Current supply helicopters PR1
- Respawn and death-loop lifecycle
- Vehicle theft economy pitch
- GUER tunnel network pitch
- Content, reference and catalogs
- Faction unit/vehicle roster catalog
- Auxiliary/SF/civilian unit catalog
- Gear store loadout route catalog
- Upgrade research (cross-faction)
- Gear store price and upgrade catalog
- Gear store catalog (complete, per faction)
- Defense structures catalog
- Artillery reference per faction
- AI squad team templates catalog
- Town AI lifecycle reference
- Town AI group composition catalog
- Class-skill system reference
- Player skill abilities reference
- Default gear template content catalog
- Chernarus map content reference
- Takistan map content reference
- Takistan features
- Takistan parity reference
- Takistan oilfields objective reference
- IRS IR-smoke countermeasure
- Arty module special munitions
- Zeta cargo sling-load reference
- Spawn primitive function reference
- Kill and score pipeline
- Waypoint helper function reference
- Position and proximity function reference
- Side/team state function reference
- Player AI watchdog and recovery
- AICOM stuck-recovery v2
- LoadoutManager data-model contributor guide
- Discord status bot setup and reference
- GLOBALGAMESTATS extension reference
- New player quickstart (player guide)
- Optional client mods (player guide)
- Earning funds and score (player guide)
- Vehicle service and logistics (player guide)
- Commander's handbook (player guide)
- Tactical support menu
- Paradrop player experience
- Supply missions (player guide)
- In-game briefing & Diary field manual
- Playable maps catalog
- Faction root variables reference
- Faction base structures catalog
- Counter-battery radar system
- Bank, Reserve and Artillery Radar structures
- Map ruleset model and object config
- Countermeasures module reference
- Vehicle countermeasure (flares/spoofing)
- UAV terminal and spotter system
- Artillery firing function reference
- Service Point pricing model
- Medic redeployment truck (forward spawn)
- Side-patrol runtime and convoy mechanics
- Day/night cycle and weather system
- Config lookup helper reference
- CIPHER sort utilities reference
- Modded maps status and content
- BattlEye filter setup and OA taxonomy
- Player squad/group join protocol
- AutoFlip vehicle recovery
- Engine stealth fuel toggle
- Valhalla vehicle climbing-assist
- Missile and ordnance Fired-EH reference
- Vehicle equip and rearm reference
- Array and collection utilities
- Server composition spawner reference
- Upgrade queue server loop
- Map boundaries and off-map enforcement
- Namespace/profile/diagnostic utilities
- Group bool getVariable A2-OA trap
- Vehicle weapon balance init
- View distance auto-throttle
- Camp & respawn-camp getters
- Performance audit writer
- Site clearance (bulldozer)
- Factory queue cancel & refund
- AI commander tunable constants
- Experimental feature-flag constants
- Flag system quick reference
- Mission tunable constants catalog
- Gear parsing & cargo capacity
- Structure dressing function
- Paradrop delivery functions
- ICBM nuke client VFX & radiation
- Server HandleSpecial router
- LocalizeMessage chat router
- Gear buy-menu render & price functions
- Server broadcast & telemetry loops
- Per-unit client init pipeline
- Vehicle marking & texture pipeline
- Defense category & budget
- Legacy AI order primitives
- Commander-team driver
- AICOM command verbs
- AICOM behavior fix taxonomy
- AI commander wildcard deck reference
- AICOM aircraft and airfield system
- Static-defense manning
- End-of-game stats screen
- AI commander execution loop
- Deployable bipod / weapon resting
- Town-economy getters
- Server-init deadspawn & airfield probe
- GUER VBIED detonate action
- Resource income-tick engine
- AI commander treasury accessors
- PVF send-helper contracts
- AICOM logging & AICOMSTAT telemetry
- AICOMSTAT v2 event census
- WASPSCALE v2 telemetry
- WASPSCALE v2-ext coverage audit
- Telemetry families reference
- Group lifecycle & entity reaping
- Batch AI spawner orchestrator
- Client funds/income HUD readout
- Server group GC & cap warning
- Town runtime tuning constants
- Client input/hotkey handler
- WASP base-repair system
- WASP DropRPG launcher/ordnance
- CoIn construction-interface client engine
- Town-capture garrison & airfield rebuild
- Map-control & minimap templates
- Client FPS & state telemetry
- Client service-proximity getters
- Airfield-exclusive roster & unit hints
- Unit-camera spectator system
- Town-garrison patrol/defense worker
- RequestTeamUpdate squad-discipline
- Arma2Warfare GPT assistant
- LoadoutManager build configs & defines
- GLOBALGAMESTATS extension logging
- Discord bot instrumented logging
- Eden/Everon & Taviana map content
- Cruise missile strike asset
- AI / HC
- AI headless and performance
- AI mods and pathfinding reference
- Headless client scaling and topology
- AI runtime/HC loop map
- Headless client init and stat loop
- HC delegation target selection
- Player AI caps and role balance
- Old WarfareBE FPS comparison
- AI commander autonomy audit
- Upstream BE 2073 AICOM delta
- Parent 2.073 divergence audit
- AI commander capture & fun plan
- AI commander B69 improvement roadmap
- AI commander B69 implementation sketches
- AICOM V2 cutover status
- Headless delegation and failover
- Commander reassignment call shape
- GUER Director living-resistance pitch
- Quality and operations
- Foundation perf findings & Tier-3 dead-ends
- Dead/stale code register
- Commander vote/reassignment
- Attack-wave authority
- Server runtime and operations
- Server ops runbook
- JIP enrollment & client data delivery (b74.2 lessons)
- Server gameplay runtime atlas
- PerformanceAuditAnalyzer
- Performance opportunity sweep
- Documentation plan
- Knowledge platform roadmap
- Wiki quality audit
- Wiki pruning and relevance ledger
- Audit findings queue (2026-06-03)
- Deep review findings
- Client UI / server-loop perf findings
- Performance gain simulation
- Self-host testing field notes
- Cleanup and work lanes
- Hardening and authority
- UI / player workflows
- Client UI, HUD and menus
- UI HUD and dialogs
- Player UI workflow map
- Client UI systems atlas
- UI IDD collision repair
- UI control class library reference
- UI theme palette and style macros
- UI design inspiration 2026-07
- Available-actions client gate FSM
- Gear/loadout/EASA atlas
- Gear template profile filter
- Vehicle cargo equip loop bounds
- Factory and purchase systems atlas
- Service menu affordability guards
- WASP overlay
- Class-skill system reference
- Skin selector and class swap
- Earplugs audio toggle
- Mission audio catalog
- HQ radio knowledge-base catalog
- QoL trio player hints
- Player vehicle/travel actions
- Tooling / release / integrations
- Tools and build workflow
- Warfare web tools
- Ecosystem & companion repos
- Zargabad tooling parity
- July 2026 release readiness
- Operator monitor and CPU affinity tools
- Tooling release readiness audit
- Source fix propagation queue
- Agent release readiness ledger
- Release source intake map
- Testing/debugging/release workflow
- Current RPT release gate
- RPT telemetry consumer port map
- External integrations
- Integration trust boundary audit
- AntiStack database extension audit
- Community & Dev
- Community & Dev
- Miksuu upstream wiki import / archive index
- Upstream changelog feature leads
- Developer history and upstream lessons
- Upstream Miksuu commit intel
- Upstream mining ledger
- Archive script mining v2
- Upstream BE 2073 AICOM delta
- Parent 2.073 divergence audit
- PR8 and Drone upstream lesson match
- Development lessons learned
- External research reports
- Audit archive 2026-07
- Briefing reference
- Utes invasion concept
- Miksuu archive: Home
- Miksuu archive: Welcome
- Miksuu archive: Big announcements
- Miksuu archive: Changelog
- Miksuu archive: Development process
- Miksuu archive: Discord bot
- Miksuu archive: Gameplay videos
- Miksuu archive: LoadoutManager
- Miksuu archive: Chernarus script architecture
- Base-game visual catalogs
- Compatibility and references
- HC upstream history and lessons
- Player stats branch audit
- BuyMenu EASA QoL branch audit
- Perf quick wins branch audit
- Commander positions branch audit
- Zargabad branch audit
- Quad AI Commander concept
- Arma 2 OA external reference guide
- Base-game config & image reference
- Arma 2 OA compatibility audit
- Arma 2 OA agent traps reference
- Arma 2 OA command versions
- Wiki source consistency
- External Arma 2 OA reference index