-
Notifications
You must be signed in to change notification settings - Fork 0
Factory And Purchase Systems Atlas
This page maps how units and vehicles become purchasable, how the buy menu gates and queues player purchases, how spawned units enter the mission, and where the older server-side AI buy path currently sits.
Primary source scope:
Rsc/Dialogs.hppClient/GUI/GUI_Menu.sqfClient/GUI/GUI_Menu_BuyUnits.sqfClient/Functions/Client_BuildUnit.sqfClient/Functions/Client_UIFillListBuyUnits.sqfClient/Functions/Client_UIChangeComboBuyUnits.sqfClient/FSM/updateavailableactions.fsmClient/Init/Init_Client.sqfCommon/Init/Init_Common.sqfCommon/Init/Init_CommonConstants.sqfCommon/Init/Init_PublicVariables.sqfCommon/Config/Core/*.sqfCommon/Config/Core_Root/*.sqfCommon/Config/Core_Units/*.sqfCommon/Config/Core_Squads/*.sqfCommon/Functions/Common_CreateUnit.sqfCommon/Functions/Common_CreateVehicle.sqfServer/Functions/Server_BuyUnit.sqfServer/Init/Init_Server.sqf
| Need | Start here | Then open |
|---|---|---|
| Player purchase flow, queue counters or spawn path | Player purchase flow, Purchase checks, Queue model | Factory queue cleanup, Player AI caps and role balance |
| Current buy-menu price, nil-data guard, squad cap and driver-default branch truth | B750 buy-list and squad-cap current-master route, Buy-menu price and driver-key branch matrix | Feature status, Client UI systems atlas |
| Destroyed-factory debit/refund behavior | Destroyed-factory refund branch matrix | Source fix propagation queue, Economy authority first cut |
| Factory config, upgrade gating and faction lists | Config chain, Factory lists, Buy menu filtering | Upgrades and research, SQF code atlas |
| Server/AI production path | Server AI buy path | AI commander autonomy audit, AI runtime/HC loop map |
| Area | Source-backed finding |
|---|---|
| Player buy path | The player buy menu does not send a RequestBuyUnit PVF. GUI_Menu_BuyUnits.sqf calls local BuildUnit, compiled from Client_BuildUnit.sqf, then deducts client funds. |
| Server buy path | Branch-scoped. Docs/source, Miksuu and perf compile AIBuyUnit = Server_BuyUnit.sqf with no checked maintained-root Spawn AIBuyUnit caller; current stable/B74.1/B74.2/B69/B74 compile it and call it from AI commander production. This remains an AI-team server worker, not player-buy authority. |
| Config model |
Common/Config/Core/*.sqf creates per-class metadata arrays; Core_Units/*.sqf groups class names into factory lists such as WFBE_WESTLIGHTUNITS; Core_Root/*.sqf selects which side root calls which unit/structure/upgrade files. |
| Availability |
updateavailableactions.fsm sets barracksInRange, lightInRange, heavyInRange, aircraftInRange, depotInRange and hangarInRange. Command center range can replace normal purchase range through commandInRange. |
| B750/B751 buy-menu current-master route | Current stable origin/master@7bfcf09a9 carries PR #87/B750 missing-unit-data upgrade guards and infantry squad-cap growth plus PR #88/B751 faction-filter nil-data guards in both maintained roots; smoke is still required before release-ready wording. |
| Queueing | Player queue caps are client missionNamespace counters initialized in Init_Client.sqf; factory FIFO order is stored on the building variable queu. |
| Unit creation | Both client and server paths call common primitives: WFBE_CO_FNC_CreateUnit and WFBE_CO_FNC_CreateVehicle, which attach global init, killed/hit handlers, tracking and performance-audit hooks. |
| Risk | Purchase authority is largely client-side for player buys. That is consistent with legacy Warfare locality, but high-value additions should not assume there is a server-side purchase validator. |
PR #87 merged origin/feat/b750-factory-aicom@605ad7326707b9422303e60ca6c286d6e0700864 into origin/master@c4c9a64790c63fe264bd1a25f84f0b3ca7b49362 on 2026-06-24T15:10:56Z; PR #88/B751 later advanced current stable to origin/master@7bfcf09a912109e765b24dbe181edebd9c8207f5. The purchase-side subset of the scoped B750 delta 6a34799b4..c4c9a6479 is four maintained-root files / +24 / -16 and clean under git diff --check: source Chernarus and maintained Vanilla Client_UIFillListBuyUnits.sqf plus GUI_Menu_BuyUnits.sqf.
| Scope | Buy-menu result | Release gate |
|---|---|---|
Current master origin/master@7bfcf09a9 / PR #88 B751 on PR #87 B750 |
Both maintained roots default _upgradePass = false, then only read QUERYUNITUPGRADE when _c exists at Client_UIFillListBuyUnits.sqf:88-92, so roster classnames without registered unit metadata hide instead of stranding _upgradePass undefined. B751 also hides nil _c rows before QUERYUNITFACTION at Client_UIFillListBuyUnits.sqf:40. Both roots replace the previous quarter-tier cap with GUI_Menu_BuyUnits.sqf:137-138: read Barracks level, then use (10 + (_realSize * 2)) min _mbu; commander bonus still adds +10 at :139-145. |
Smoke missing or delayed unit-data rows, faction/upgrade filtering, Barracks levels 0-3, commander bonus, depot infantry camp gate, exact/full group limits and normal queue/debit behavior in source Chernarus plus maintained Vanilla. This is current-master source evidence, not package/release proof. |
Buy-menu price/key current-master follow-up 2026-06-24: current stable is now origin/master@7bfcf09a912109e765b24dbe181edebd9c8207f5 after PR #88/B751 merged on top of PR #87/B750. Checked B750+B751 price/key-adjacent paths changed six maintained-root files / +50 / -32 from B75 and are clean under git diff --check: both roots Client_UIFillListBuyUnits.sqf, GUI_Menu_BuyUnits.sqf and Init_CommonConstants.sqf. The current-master price/key result is stable-shaped: selected-detail display, buy-list display and purchase debit all use the modifier-bearing formula, and driver-default writes mirror lowercase plus uppercase compatibility keys in both maintained roots. B750 adds upgrade-read nil-data and infantry cap fixes; B751 adds the faction-filter nil _c guard plus AICOM hard-cap tuning; neither closes the level-0 UNIT_COST_MODIFIER reset. Older branch context remains useful: docs/source is still old-shape, current Miksuu master@b8389e748243 and perf origin/perf/quick-wins@0076040f still match that old shape, B74.1/B69/B74/B74.2/historical a96fdda2 already fixed selected-detail and key mirroring, and historical a66d4691 remains Chernarus-only selected-detail evidence.
The branch-only Barracks and Trello #91 rows below were checked later on 2026-06-23 against current stable origin/master@f8a76de34; they are separate from the buy-menu price/key matrix in this section.
| Scope | Factory purchase status |
|---|---|
Current master origin/master@7bfcf09a9 / PR #88 B751 |
Current master includes PR #87/B750 plus PR #88/B751 in both maintained roots: upgrade reads are guarded when _c is nil, faction filtering now also hides nil _c rows before QUERYUNITFACTION, the player infantry cap starts at 10 plus 2 per Barracks level, clamped by _mbu, and commander bonus is preserved. The current-master buy-menu price/key anchors are list price Client_UIFillListBuyUnits.sqf:96, purchase seed GUI_Menu_BuyUnits.sqf:105, selected detail :420, driver-key mirror writes :48-49,:194-195,:443-444,:488,:494,:500,:533-534,:546-547, B751 faction-filter guard Client_UIFillListBuyUnits.sqf:40, B751 hard cap Init_CommonConstants.sqf:159, and one-time modifier init Init_CommonConstants.sqf:661 in both maintained roots. This does not close the older level-0 UNIT_COST_MODIFIER reset debt or player-purchase server-authority gap. |
Docs/source HEAD@f9601c92e0a4 (source-unchanged from b8180bb319ed / cacd46f09163 / 4120137f / 8d611092 / ebd86fad0 for checked buy/build paths) |
Both maintained roots still have the old buy-menu selected-detail price drift, no level-0 UNIT_COST_MODIFIER reset, mixed driver-default keys and no destroyed-factory refund on the dead/null abort. |
Current stable/B74.1 origin/master@f8a76de34 / origin/claude/b74.1-aicom@f8a76de34, current B69 origin/claude/b69@8d465fce, adjacent B74 origin/claude/b74-aicom-spend@b23f557f and current B74.2 origin/claude/b74.2-aicom@21b62b04
|
Both maintained roots pass _currentCost into BuildUnit, refund the real dead/null factory abort, fix selected-detail price display, mirror driver-default profile keys and still leave the level-0 UNIT_COST_MODIFIER reset open. Current stable/B74.1/B69/B74 use selected detail GUI_Menu_BuyUnits.sqf:416; current B74.2 keeps maintained Vanilla at :416 and shifts source Chernarus to :422 after pop-tier AI-cap setup. The 0139a3468609..f8a76de34 checked price/key delta touches constants only; checked d472da6a..21b62b04 is empty for checked buy-menu price/key paths and Client_BuildUnit.sqf in both maintained roots. |
Branch-only origin/claude/trello-buymenu-gear-display@db1291beba
|
One clean current-stable-based commit (git diff --check clean) changes only maintained-root GUI_Menu_BuyUnits.sqf (+70/-2) to mirror the existing special AT loadout replacements from Common_CreateUnit.sqf:78-95 in the infantry gear/ammo preview. The branch adds the preview adjustment at GUI_Menu_BuyUnits.sqf:552-565 in both roots and leaves price/key anchors on the current-stable shape (_currentCost purchase :99, selected detail :416, full price text :617). Not a price/key/reset closure. |
Branch-only origin/claude/upstream-barracks-4th-level@e83de9c4
|
The branch reshuffles infantry QUERYUNITUPGRADE metadata in source Chernarus plus maintained Vanilla while keeping the same file-line layout. Representative branch rows move Core_US.sqf:21 US_Soldier_AT_EP1 to required level 3, :24 US_Soldier_HAT_EP1 to 4, :27 AA to 3, :33 MG to 2, :48 marksman to 3 and :81 SL to 3; representative EAST rows move Core_RU.sqf:18 AT to 2, :21 HAT to 4, :24 AA to 2, :30 MG to 2, :45 sniper to 4 and :60 SL to 3. Common_CreateUnit.sqf:101 also adds a US_Soldier_AT_EP1 MAAWS HEAT magazine replacement in both maintained roots. Current stable keeps the older required-level rows and lacks the HEAT replacement. |
Historical release commit a96fdda2
|
Both maintained roots match the older release-fixed refund shape at the old line anchors. Treat as historical release evidence until a live release/* head is restored or rechecked. |
Miksuu b8389e748243 and origin/perf/quick-wins 0076040f
|
Both maintained roots keep the older docs-checkout dead/null refund shape. Perf Chernarus adds a crewless queue-counter cleanup only; it does not pass _currentCost or refund the dead/null factory abort. |
Historical QoL commit a66d4691
|
Chernarus-only UI QoL evidence fixes selected-detail price and adds affordability/queue UI work, but Vanilla is untouched and the refund/key/reset issues remain old-shape. No current feat/buymenu-easa-qol head exists on origin as of 2026-06-23. |
flowchart TD
A["Main menu action"] --> B["RscMenu_BuyUnits onLoad"]
B --> C["Client/GUI/GUI_Menu_BuyUnits.sqf"]
C --> D["Range globals from updateavailableactions.fsm"]
C --> E["WFBE_<side><factory>UNITS list"]
E --> F["Client_UIFillListBuyUnits.sqf"]
F --> G["Upgrade/faction/cost filtered listbox"]
G --> H["MenuAction = 1 purchase"]
H --> I["Funds, camp, group-size and queue checks"]
I --> J["Spawn BuildUnit"]
J --> K["Client_BuildUnit.sqf"]
K --> L["Common_CreateUnit / Common_CreateVehicle"]
L --> M["Unit/vehicle in player group"]
Entry points:
-
GUI_Menu.sqfcreatesRscMenu_BuyUnits. -
Dialogs.hppdefinesRscMenu_BuyUnitswithidd = 12000andonLoad = "_this ExecVM ""Client\GUI\GUI_Menu_BuyUnits.sqf""". -
Init_Client.sqfcompilesBuildUnit,UIChangeComboBuyUnitsandUIFillListBuyUnits.
The menu starts by choosing the closest available purchase category from the range globals:
BarracksLightHeavyAircraftDepotAirport
If no purchase type is in range, the dialog closes.
Client/FSM/updateavailableactions.fsm runs after client init and updates the globals used by the UI. It loads these important constants:
| Constant | Default | Role |
|---|---|---|
WFBE_C_UNITS_PURCHASE_RANGE |
150 |
Normal factory purchase range. |
WFBE_C_STRUCTURES_COMMANDCENTER_RANGE |
5500 |
Command center remote interaction range. |
WFBE_C_TOWNS_CAPTURE_RANGE |
40 |
Depot action/range gate in updateavailableactions.fsm (:39, :194). |
WFBE_C_TOWNS_PURCHASE_RANGE |
60 |
Buy-menu closest-depot lookup range in GUI_Menu_BuyUnits.sqf:217; not the FSM depotInRange gate. |
WFBE_C_UNITS_PURCHASE_HANGAR_RANGE |
50 |
Airport/hangar purchase range. |
The FSM sets _purchaseRange = if (commandInRange) then {_ccr} else {_pur}. That means the command center can effectively turn normal barracks/light/heavy/aircraft purchase into a much larger remote-purchase radius. Depot and hangar logic use their own closest-depot/airport checks.
Important split: depotInRange is computed from _tcr = WFBE_C_TOWNS_CAPTURE_RANGE in updateavailableactions.fsm:39,194; the separate WFBE_C_TOWNS_PURCHASE_RANGE value is consumed by the buy menu when it resolves the closest depot at GUI_Menu_BuyUnits.sqf:217.
The active buy menu then reads:
barracksInRangelightInRangeheavyInRangeaircraftInRangedepotInRangehangarInRange
flowchart TD
A["Init_Common.sqf"] --> B["Common/Config/Core/*.sqf"]
B --> C["Per-class missionNamespace metadata"]
A --> D["Common/Config/Core_Root/Root_<side>.sqf"]
D --> E["Core_Units/Units_<faction>.sqf"]
D --> F["Core_Structures/Structures_<faction>.sqf"]
D --> G["Core_Upgrades/Upgrades_<faction>.sqf"]
E --> H["WFBE_<side>BARRACKSUNITS"]
E --> I["WFBE_<side>LIGHTUNITS"]
E --> J["WFBE_<side>HEAVYUNITS"]
E --> K["WFBE_<side>AIRCRAFTUNITS"]
E --> L["WFBE_<side>AIRPORTUNITS"]
E --> M["WFBE_<side>DEPOTUNITS"]
H --> N["Buy menu list"]
I --> N
J --> N
K --> N
L --> N
M --> N
Init_Common.sqf first loads the broad Common/Config/Core/*.sqf files, including Core_US.sqf, Core_USMC.sqf, Core_RU.sqf, Core_TKA.sqf and other content cores. These core files define per-class metadata arrays and store them under the class name in missionNamespace.
The metadata layout is defined by Init_CommonConstants.sqf:
| Index | Constant | Meaning |
|---|---|---|
0 |
QUERYUNITLABEL |
Display label. |
1 |
QUERYUNITPICTURE |
UI picture or portrait. |
2 |
QUERYUNITPRICE |
Base price. |
3 |
QUERYUNITTIME |
Build time. |
4 |
QUERYUNITCREW |
Crew slot metadata or scalar sentinel. |
5 |
QUERYUNITUPGRADE |
Required upgrade level. |
6 |
QUERYUNITFACTORY |
Factory category index/type. |
7 |
QUERYUNITSKILL |
AI skill. |
8 |
QUERYUNITFACTION |
Faction filter label. |
9 |
QUERYUNITTURRETS |
Extra turret paths. |
Representative metadata example from Core_US.sqf: US_Soldier_EP1 has price 150, build time 4, infantry upgrade requirement 0, factory category 0, skill 1 and faction US.
After core metadata is loaded, Core_Root/Root_<side>.sqf chooses side-specific root data and calls the matching Core_Units, Core_Squads, Core_Structures and Core_Upgrades files. For example, Root_US.sqf sets West crew/pilot/soldier/support vehicle arrays and then calls Units_CO_US.sqf, Structures_CO_US.sqf and Upgrades_CO_US.sqf.
Core_Units/*.sqf files put class names into six purchase pools:
| Pool | Example variable | Menu tab |
|---|---|---|
| Barracks | WFBE_WESTBARRACKSUNITS |
Infantry. |
| Light | WFBE_WESTLIGHTUNITS |
Cars, trucks, light armor, support vehicles. |
| Heavy | WFBE_WESTHEAVYUNITS |
APCs, tanks, heavy artillery/AA. |
| Aircraft | WFBE_WESTAIRCRAFTUNITS |
Helicopters and some fixed-wing classes. |
| Airport | WFBE_WESTAIRPORTUNITS |
Fixed-wing/hangar purchases. |
| Depot | WFBE_WESTDEPOTUNITS |
Civilian/simple vehicles and optionally town infantry. |
Units_CO_US.sqf shows the complete pattern:
- Sets
WFBE_WESTBARRACKSUNITS, then callsClient/Init/Init_Faction.sqflocally to build faction-filter labels. - Sets
WFBE_WESTLIGHTUNITS,WFBE_WESTHEAVYUNITS,WFBE_WESTAIRCRAFTUNITS,WFBE_WESTAIRPORTUNITSandWFBE_WESTDEPOTUNITS. - Adds depot infantry only if
WFBE_C_UNITS_TOWN_PURCHASE > 0. - Adds boats only when
IS_naval_mapis true. - Handles Chernarus vs non-Chernarus class variants through
IS_chernarus_map_dependent.
Client_UIFillListBuyUnits.sqf fills the listbox from the selected factory pool. It applies:
- Unit-cost upgrade modifier:
WFBE_UP_UNITCOSTsetsUNIT_COST_MODIFIERto0.75or0.5. - Current side upgrades: a unit is shown if
QUERYUNITUPGRADE <= currentUpgrades select tabValue. - Faction dropdown filter: values come from
WFBE_<side><factory>FACTIONS, built byInit_Faction.sqf. - Depot exceptions: some infantry are manually allowed when barracks upgrade thresholds are met.
- Visual coloring for repair trucks, ammo trucks, airlift vehicles, ambulances, salvage trucks, artillery vehicles and supply trucks.
Cost shown in the list is:
round (((_c select QUERYUNITPRICE) * ATTACK_WAVE_PRICE_MODIFIER) * UNIT_COST_MODIFIER)The visible list is therefore a combined result of core metadata, side upgrade state, faction filter state, unit-cost upgrades and attack-wave discount state.
Current master now carries two nil-data defenses: PR #87/B750 hides classnames without registered unit metadata before evaluating QUERYUNITUPGRADE at Client_UIFillListBuyUnits.sqf:88-92, and PR #88/B751 hides nil _c rows before faction filtering at Client_UIFillListBuyUnits.sqf:40. The source proof is both source Chernarus and maintained Vanilla at origin/master@7bfcf09a9.
Use the buy-menu price and driver-key branch matrix for per-ref proof. The local rule is simpler: list display, selected-detail display, affordability and debit must share one price path. The still-open cross-branch issue is the unit-cost reset trap. Client_UIFillListBuyUnits.sqf:7-16 still sets UNIT_COST_MODIFIER only when the upgrade level is 1 or 2, while Init_CommonConstants.sqf initializes the global once (current master/B751 both roots :661, docs/Miksuu/perf/historical QoL :203, current stable/B74.1 Chernarus :597 and Vanilla :399, B74.2 Chernarus :610 and Vanilla :399, B69 Chernarus :565, B74 Chernarus :578, B69/B74 Vanilla :399, historical a96fdda2 :216). If a long-lived client has already seen a discounted state, a later no-upgrade list fill can inherit the stale discount. Patch by assigning the default before the if (_unitCostUpgradeLevel > 0) branch or by using a local price helper instead of a mutable global.
Docs anchors below remain valid because checked buy-menu controller/list-filler paths are unchanged from 8d611092 / ebd86fad0 through docs/source HEAD@b8180bb319ed and from 4120137f for the current-B74 refresh. Current master/B751 line drift was spot-checked on 2026-06-24 against origin/master@7bfcf09a9; older stable-shaped refs were previously checked against origin/master@f8a76de34, origin/claude/b74.1-aicom@f8a76de34, origin/claude/b74.2-aicom@21b62b04, origin/claude/b69@8d465fce and origin/claude/b74-aicom-spend@b23f557f.
| Scope | Selected-detail price | Unit-cost reset | Driver-default profile key | Practical result |
|---|---|---|---|---|
Current master origin/master@7bfcf09a9 / PR #88 B751 |
Both maintained roots use the modifier-bearing formula for list price at Client_UIFillListBuyUnits.sqf:96, purchase seed at GUI_Menu_BuyUnits.sqf:105, selected-detail display at :420 and full price field at :621. B751 adds a faction-filter nil _c guard at Client_UIFillListBuyUnits.sqf:40 without moving GUI price anchors. |
Still no level-0 reset: Client_UIFillListBuyUnits.sqf:11,14 are the only modifier writes, while Init_CommonConstants.sqf:661 initializes the global once. |
Init/toggle/max-out/reset mirror lowercase plus uppercase compatibility keys at GUI_Menu_BuyUnits.sqf:48-49,:194-195,:443-444,:488,:494,:500,:533-534,:546-547; live reads still use lowercase at :110,:149,:167,:193,:468,:470,:489,:495,:501,:526. |
Selected-detail display and compatibility-key mirroring remain fixed on current-master-shaped targets; B750 adds the nil _c upgrade guard and infantry cap restore, B751 adds faction-filter nil-data hardening and AICOM hard cap Init_CommonConstants.sqf:159, and the level-0 modifier reset remains open. |
Docs/source HEAD@b8180bb319ed Chernarus + maintained Vanilla |
Still recomputes selected detail as floor ((_currentUnit select QUERYUNITPRICE) * ATTACK_WAVE_PRICE_MODIFIER) at GUI_Menu_BuyUnits.sqf:261, while list and purchase use UNIT_COST_MODIFIER at Client_UIFillListBuyUnits.sqf:60 and GUI_Menu_BuyUnits.sqf:90. |
No UNIT_COST_MODIFIER = 1 reset in Client_UIFillListBuyUnits.sqf; only 0.75 and 0.5 writes at :11,14. |
Uppercase init/toggle remains at GUI_Menu_BuyUnits.sqf:39-42,173; lowercase reads/writes remain at :95,136,154,284,308,328-341,366,373,385. |
All three older UI/economy risks remain in the docs/source checkout; checked price/key paths are unchanged from 4120137f / 8d611092 / ebd86fad0. |
Current stable/B74.1 origin/master@f8a76de34 / origin/claude/b74.1-aicom@f8a76de34, current B69 origin/claude/b69@8d465fce, adjacent B74 origin/claude/b74-aicom-spend@b23f557f, current B74.2 origin/claude/b74.2-aicom@21b62b04 and historical release commit a96fdda2
|
Current stable/B74.1/B69/B74 maintained roots use the modifier-bearing selected-detail formula at GUI_Menu_BuyUnits.sqf:416, list filler _price at Client_UIFillListBuyUnits.sqf:90 and purchase cost at GUI_Menu_BuyUnits.sqf:99. Current B74.2 keeps maintained Vanilla at those anchors and shifts source Chernarus to purchase :105 and selected detail :422 after pop-tier AI-cap setup. Historical a96fdda2 has the older fixed-shape anchors (GUI_Menu_BuyUnits.sqf:284, Client_UIFillListBuyUnits.sqf:61, purchase :96). |
Still no level-0 reset: Client_UIFillListBuyUnits.sqf:11,14 are the only modifier writes in every checked ref. One-time init is current stable/B74.1 Chernarus Init_CommonConstants.sqf:597, current stable/B74.1 Vanilla :399, B74.2 Chernarus :610, B74.2 Vanilla :399, B69 Chernarus :565, B74 Chernarus :578, B69/B74 Vanilla :399 and historical a96fdda2 :216. |
Init/toggle/max-out/reset mirror lowercase and uppercase keys on current stable/B74.1/B69/B74 (GUI_Menu_BuyUnits.sqf:42-43,189-191,439-440,484,490,496,529-530,542-543; B74.2 source Chernarus line-drifts to :48-49,195-197,445-446,490,496,502,535-536,548-549; historical release line drift is :40-41,181-183,307-308,352-364,397-411), while live reads use lowercase. |
Selected-detail and compatibility-key drift are fixed in current stable/B74.1/B69/B74/B74.2 and historical a96fdda2; level-0 modifier reset remains open. 0139a3468609..origin/master and B69..B74 touch only constants among checked price/key paths; checked d472da6a..21b62b04 is empty for checked buy-menu price/key paths. |
Miksuu b8389e74 and perf/quick-wins 0076040f
|
Same old selected-detail formula as the docs checkout in both maintained roots (GUI_Menu_BuyUnits.sqf:261). |
Same no-reset shape in both maintained roots. | Same uppercase init/toggle plus lowercase live-read split as the docs checkout. | No upstream/perf rescue found. |
Historical QoL commit a66d4691; no current feat/buymenu-easa-qol head |
Chernarus selected detail is fixed at GUI_Menu_BuyUnits.sqf:280; maintained Vanilla still uses the old :261 formula. |
No reset in either root. | Mixed profile key remains in both roots. | Useful Chernarus UI evidence, but not a full maintained-root price/key cleanup and not a live branch head as of 2026-06-23. |
Branch-only origin/claude/trello-buymenu-gear-display@db1291beba
|
Keeps the current-stable price anchors (GUI_Menu_BuyUnits.sqf:99,416,617) and changes only infantry gear/ammo preview arrays for Ins_Soldier_AT / MVD_Soldier_AT at :552-565 in both maintained roots. |
Same no-reset shape as current stable. | Same current-stable dual-key policy. | Branch-only Trello #91 gear-display candidate; not a price/key/reset rescue head. |
Patch order: first reset or localize the unit-cost modifier so list row, selected-detail display, affordability check and debit agree for levels 0/1/2; then decide whether current-stable / historical-release dual-key mirroring is the intended compatibility policy or whether one normalized key should replace it. Smoke low/exact/high funds, unit-cost levels 0/1/2, infantry, crewless vehicles, full-crew vehicles, checkbox toggle, max-out and reset.
When MenuAction == 1, GUI_Menu_BuyUnits.sqf performs these checks before spawning:
| Check | Source behavior |
|---|---|
| Funds | Uses Call GetPlayerFunds; missing funds blocks and hints. |
| Depot infantry camps | Depot infantry purchase requires all camps on that town to belong to the player's side. |
| Group size | Uses live units plus local unitQueu, scaled by Barracks upgrade and with a commander bonus. Current master carries the B750 GUI_Menu_BuyUnits.sqf:137-138 formula for 10 + 2 * Barracks level clamped to _mbu, then keeps the commander +10 branch at :139-145. |
| Crew count | Vehicle purchases can include driver, gunner, commander and extra turret crew. |
| Queue cap | Checks WFBE_C_QUEUE_<type> against WFBE_C_QUEUE_<type>_MAX. |
| Factory queue text | Reads the selected building's queu variable to show immediate or queued purchase hint. |
For the exact default AI-follower table and role-balance notes, use Player AI caps and role balance. The important source rule is that the lobby player-AI cap is scaled by barracks level, Soldier slots apply a 1.5x multiplier before that scaling, and commander team players get +10 total group slots. Vehicle crew selected in the buy menu consumes the same group cap, so a driver/gunner/commander/extra-turret purchase can fill several follower slots at once.
If accepted:
-
WFBE_C_QUEUE_<type>increments locally. -
_params Spawn BuildUnit. - Funds are deducted with
ChangePlayerFunds.
Destroyed-factory refund behavior is branch-scoped; use the destroyed-factory refund branch matrix for per-ref proof. Practical rule: preserve or port the current-stable/B74.1/B74.2 / historical-release refund payload when targeting an old-shape branch, but keep this separate from full server-side purchase authority. Smoke factory death, buyer disconnect, empty/crewless vehicles and normal completion together.
Important authority note: no server PVF request is sent for this player purchase. There is no Server/PVFunctions/RequestBuyUnit.sqf or Server/PVFunctions/RequestBuildUnit.sqf in the current source, and neither request is registered in Init_PublicVariables.sqf.
Mini-scout follow-up 2026-06-04 rechecked the docs/source static footprint: Init_Client.sqf:52 compiles BuildUnit, GUI_Menu_BuyUnits.sqf:155 spawns it for player purchases, and Init_Server.sqf:10 compiles AIBuyUnit = Server_BuyUnit.sqf. Current-head refresh 2026-06-24 keeps the player path separate: repo HEAD and current B74.2 still have no active RequestBuyUnit/RequestBuildUnit PVF path in maintained roots. The server buy worker is branch-scoped: docs/source/Miksuu/perf have no checked maintained-root Spawn AIBuyUnit caller beyond compile, while current stable/B74.1/B74.2/B69/B74 call it from AI_Commander_Produce.sqf:320 after compiling it at Init_Server.sqf:16. That AI production path does not validate or replace player factory purchases.
This means the durable fix is not a small "refund missing" patch by itself. A public-server-safe redesign needs an explicit request/accept/debit/abort protocol: the server should validate factory state, funds, side, queue capacity and spawn legality before accepting, then debit only at acceptance or refund every rejected/aborted post-accept path through one helper.
Terminology note from the 2026-06-04 factory queue scout (updated 2026-06-21): a queue-cancel addAction ("Cancel last queued unit") is attached to the factory building during the build worker (Client_BuildUnit.sqf:189-199); it calls Client\Action\Action_CancelQueue.sqf which removes the player's last queue token, decrements unitQueu and WFBE_C_QUEUE_* counters, and refunds the paid cost (with an attack-wave discount cap). Use terminology according to the code path: "cancel" = player addAction while waiting in queue (removes token, refunds cost, suppresses spawn via the _qIdx < 0 guard that fires when the token is gone before the worker reaches the front); "abort/refund" = internal worker exit when the factory is dead or null (the !alive _building exitWith). The Back button in the buy menu still only returns to the main WF menu (GUI_Menu_BuyUnits.sqf:495-499) and does not cancel an in-progress build.
Refund anchors below were refreshed 2026-06-21. Docs branch ebd86fad0 is unchanged from 8d611092 for the checked buy/build paths; current stable origin/master@0139a346 moved the refund closure to the later cancellation-aware block; a96fdda2, 7ff18c49 and a66d4691 are historical commits because current origin exposes no release/* or feat/buymenu-easa-qol heads.
| Scope | Menu/debit shape | Dead/null factory abort | Development meaning |
|---|---|---|---|
Docs checkout cacd46f09163 / 4120137f / 8d611092, Miksuu b8389e748243 and origin/perf/quick-wins 0076040f
|
Both maintained roots check the local queue cap, increment WFBE_C_QUEUE_%1, spawn BuildUnit, then debit with -(_currentCost) Call ChangePlayerFunds at GUI_Menu_BuyUnits.sqf:154-156. _currentCost is not passed to BuildUnit. |
Client_BuildUnit.sqf:211-214 exits when the building is dead/null and decrements unitQueu plus WFBE_C_QUEUE_%1, but does not refund funds. Perf Chernarus only adds crewless counter cleanup at Client_BuildUnit.sqf:365-368; perf Vanilla remains old-shape. |
The player pays even when the build worker aborts after a destroyed/null factory on these refs. Treat as patch-ready if targeting those roots. |
Current stable/B74.1 origin/master@f8a76de34 / origin/claude/b74.1-aicom@f8a76de34, current B69 origin/claude/b69@8d465fce, adjacent B74 origin/claude/b74-aicom-spend@b23f557f, current B74.2 origin/claude/b74.2-aicom@21b62b04 and historical release commit a96fdda2
|
Current stable/B74.1, B69 and adjacent B74 pass _currentCost into BuildUnit at GUI_Menu_BuyUnits.sqf:163, spawn at :164 and debit at :165 in both maintained roots. Current B74.2 keeps those anchors in maintained Vanilla and shifts source Chernarus to :169-171. Historical a96fdda2 has the same payload/debit shape at GUI_Menu_BuyUnits.sqf:160-162. |
Client_BuildUnit.sqf:7 reads the optional cost payload. Current stable/B74.1/B69/B74/B74.2 dead/null abort at :276-280 decrements queue/counter and refunds _currentCost when positive; checked d472da6a..21b62b04 is empty for Client_BuildUnit.sqf in both maintained roots. Historical a96fdda2 does the same at :212-216. The later crewless/Depot branch explicitly says no refund because the vehicle already spawned (current stable/B74.1 Chernarus :491-497, maintained Vanilla :446-452; historical a96fdda2 :373-379). |
Destroyed-factory refund closure is source-present in current stable/B74.1/B69/B74/B74.2 and historical a96fdda2 for Chernarus and maintained Vanilla, but purchase authority is still client-local and Arma smoke remains required. |
Intermediate historical release commit 7ff18c49
|
Both maintained roots already pass/debit _currentCost at GUI_Menu_BuyUnits.sqf:160-162. |
The dead/null exit at Client_BuildUnit.sqf:212-215 still has queue cleanup only. The empty/crewless branch at :366-372 decrements the queue and refunds _currentCost. |
Use this only to explain older release/backlog wording. It is superseded by a96fdda2 for the real dead/null factory refund closure. |
Historical QoL commit a66d4691; no current feat/buymenu-easa-qol head |
Chernarus spawns/debits at GUI_Menu_BuyUnits.sqf:163-164; maintained Vanilla stays at :155-156. Neither root passes _currentCost to BuildUnit. |
Both roots keep the old dead/null exit at Client_BuildUnit.sqf:211-214 with queue cleanup only. |
UI QoL evidence does not include the destroyed-factory refund fix and is historical unless the branch is restored. |
There are two queue concepts:
| Queue | Scope | Source |
|---|---|---|
| Client queue cap | Client missionNamespace counters such as WFBE_C_QUEUE_LIGHT, max values initialized in Init_Client.sqf. |
Prevents a player from starting too many concurrent local builds by category. |
| Factory FIFO | Building variable queu, public on the building. |
Orders builds at the same selected factory. |
Client_BuildUnit.sqf appends a random _unique ID to _building getVariable "queu" and waits until that ID reaches the front. If the queue appears stuck longer than WFBE_LONGEST<factory>BUILDTIME, it removes the head entry. Longest build times are calculated in Init_Common.sqf by scanning the purchasable units for each structure and side.
Queue cleanup is fragile by design: changing factory type labels, longest-build variables or queue mutation rules can strand entries or let concurrent purchases overlap.
Factory-death cleanup is split. On docs/source-shaped refs the client wait path exits when the building is dead/null (Client_BuildUnit.sqf:180-182) and later removes local counters/token state (:211-214); current B74-shaped refs carry the refunded equivalent at :276-280. Server_BuyUnit.sqf has its own team-queue removal branches for the AI/server worker, and those branches are separate from player buy refunds. The building death handler itself only updates structure accounting (Server_BuildingKilled.sqf:81-93) and does not own queue cleanup or refunds.
Claude DR-33 adds two concrete implementation hazards:
| Hazard | Evidence | Fix direction |
|---|---|---|
| Empty-vehicle buys leak the client queue counter. | Current source still has an empty-vehicle exitWith before the normal unitQueu / WFBE_C_QUEUE_* decrement in Client_BuildUnit.sqf. |
Patch-ready, not patched. Every exit branch after enqueue must decrement both the building unitQueu token and the relevant WFBE_C_QUEUE_<type> counter. Smoke repeated crewless vehicle buys and normal crewed/infantry buys after the fix. See Factory queue counter token cleanup. |
Factory FIFO token identity is collision-prone; queu broadcast churn remains. |
Current source initializes varQueu = random(10)+random(100)+random(1000) in Init_Common.sqf:176 as a one-time startup value, but Client_BuildUnit.sqf:168 immediately overwrites it with varQueu = Format["%1_%2", getPlayerUID player, diag_tickTime] — a UID+tickTime token that eliminates the random collision risk — and reads it back as _unique = varQueu on line 169. The building queu array is still broadcast with setVariable [..., true] on enqueue/progress/completion (Client_BuildUnit.sqf:173,218,236). |
DR-33b token-collision fix is shipped (UID+tickTime token); queu broadcast churn via setVariable [..., true] on enqueue/progress/completion remains open as the separate follow-up. Patch the local token and counter first; broadcast reduction remains a separate UI-aware follow-up. See Factory queue counter token cleanup. |
Client_BuildUnit.sqf chooses spawn positions from either structure distance/direction arrays or nearby helper pads:
| Factory type | Preferred helper object | Fallback |
|---|---|---|
| Light |
HeliH, excluding HeliHCivil and HeliHRescue
|
Structure modelToWorld distance/direction. |
| Heavy | HeliHRescue |
Structure modelToWorld distance/direction. |
| Aircraft | HeliHCivil |
Structure modelToWorld distance/direction. |
| Barracks | Sr_border |
Structure modelToWorld distance/direction. |
| Depot |
WFBE_C_DEPOT_BUY_DISTANCE / WFBE_C_DEPOT_BUY_DIR
|
Position from town depot logic. |
| Airport |
WFBE_C_HANGAR_BUY_DISTANCE / WFBE_C_HANGAR_BUY_DIR
|
Position from airfield logic. |
This means map object placement can alter purchase spawn behavior without touching scripts.
Player build path:
- Infantry:
Client_BuildUnit.sqfcallsWFBE_CO_FNC_CreateUnit. - Vehicles:
Client_BuildUnit.sqfcallsWFBE_CO_FNC_CreateVehicle, then adds local vehicle actions, balance, artillery, missile, countermeasure, IRS, engine and reload handlers. - Optional crew are created through
WFBE_CO_FNC_CreateUnitand moved into driver/gunner/commander/turret positions. - Created units are sent to the leader waypoint helper through
WFBE_CL_FNC_SendSpawnedUnitsToLeaderWaypoint.
Common creation behavior:
-
Common_CreateUnit.sqfsets unit skill fromQUERYUNITSKILL, applies selected special-case loadout fixes, attaches killed handler and runsInit_Unit.sqfdepending on infantry tracking/global-init rules. -
Common_CreateVehicle.sqfcreates the vehicle, applies tank/APC modification, textures, direction/velocity, lock state, killed/hit bounty handlers, optional globalsetVehicleInit, map combat marker fired handler and performance audit.
Server/Init/Init_Server.sqf compiles:
AIBuyUnit = Compile preprocessFile "Server\Functions\Server_BuyUnit.sqf";Server_BuyUnit.sqf is a server-side team/AI production worker, not a drop-in mirror of the player buy path:
- expects
_id,_building,_unitType,_side,_teamand vehicle crew flags; - appends to the building
queu; - waits for the factory FIFO;
- exits if the factory dies or a player takes over the AI team;
- creates units/vehicles server-side through the common primitives;
- applies vehicle handlers and crew logic;
- clears the team's
wfbe_queueentry when done.
Current status: docs/source HEAD@f9601c92e0a4, Miksuu b8389e748243 and perf 0076040f only compile AIBuyUnit in maintained roots. Current stable/B74.1 origin/master@f8a76de34, current B74.2 origin/claude/b74.2-aicom@21b62b04, B69 origin/claude/b69@8d465fce and adjacent B74 origin/claude/b74-aicom-spend@b23f557f call it from AI commander production at AI_Commander_Produce.sqf:320 in both maintained roots. Treat Server_BuyUnit.sqf as an active AI-commander worker on those current B74-shaped refs, but do not treat it as a player purchase request/acceptance path.
Queue-model split: player purchases use client-local WFBE_C_QUEUE_* counters plus unitQueu (Init_Client.sqf:185-196,288; docs/source Client_BuildUnit.sqf:10,212-214,467-469; current B74-shaped refs line-drift the refunded dead/null branch to :276-280). The server worker uses a separate group variable wfbe_queue cleaned in Server_BuyUnit.sqf (:13-14, :77-78, :108-109, :260-261 on current source Chernarus; maintained Vanilla line-drifted). AI/player crew policy also diverges: the player path has empty/crewless behavior that can exit separately, while the server worker proceeds through server-side crew and vehicle creation. Any AI production changes need an explicit production policy rather than assuming player-buy parity.
The buy menu cost path includes two global modifiers:
| Modifier | Source |
|---|---|
ATTACK_WAVE_PRICE_MODIFIER |
Initialized in Init_CommonConstants.sqf; changed by attack-wave client special messages. |
UNIT_COST_MODIFIER |
Initialized to 1; updated by Client_UIFillListBuyUnits.sqf from WFBE_UP_UNITCOST. |
Attack wave itself is handled through direct public variable channels:
-
Common_AttackWaveActivate.sqfsendsATTACK_WAVE_INITto the server. -
Server_AttackWave.sqfpublishesATTACK_WAVE_DETAILS. -
Server/PVFunctions/AttackWave.sqflistens forATTACK_WAVE_DETAILSand sendsHandleSpecial/LocalizeMessageupdates to clients. -
Client/PVFunctions/HandleSpecial.sqfupdatesATTACK_WAVE_PRICE_MODIFIER.
Because player purchase cost is calculated client-side, any attack-wave or unit-cost work must keep UI display, local affordability and actual deduction aligned.
Core_Squads/Squads_GetFactionGroups.sqf reads QUERYUNITFACTORY and QUERYUNITUPGRADE from the same per-class metadata arrays to infer what factories and upgrade levels a group template requires.
This means class metadata mistakes can break more than the visible buy menu:
- buy list gating;
- AI squad requirement derivation;
- bounties and score;
- build time;
- factory categorization;
- crew/turret generation;
- skill applied by
Common_CreateUnit.
| Risk / status | Evidence | Development guidance |
|---|---|---|
No player RequestBuyUnit server authority |
Init_PublicVariables.sqf:9-21 lists server-command PVFs and has no RequestBuyUnit; GUI_Menu_BuyUnits.sqf:144-156 increments the local queue counter, spawns local BuildUnit, then deducts funds client-side. |
For high-value or exploit-sensitive purchases, add a server-validated request path or at least document why client-local creation is acceptable for the target server model. |
Server_BuyUnit.sqf is branch-scoped AI production, not player-buy parity |
Docs/source, Miksuu and perf compile AIBuyUnit at Init_Server.sqf:10 with no checked maintained-root Spawn AIBuyUnit caller. Current stable/B74.1/B74.2/B69/B74 compile it at Init_Server.sqf:16 and call it from AI_Commander_Produce.sqf:320 in both maintained roots. |
Treat it as active AI-commander production on B74-shaped refs, but do not treat it as a server-authoritative player purchase path. Keep AI production, player-buy request authority and queue/refund cleanup separate. |
| Player/server build drift |
Client_BuildUnit.sqf and Server_BuyUnit.sqf duplicate vehicle handler, missile, IRS, countermeasure and crew setup logic. |
Any new vehicle behavior may need both paths unless server path is formally retired or refactored. |
| Queue state is fragile | Building queu and client WFBE_C_QUEUE_* counters are manually incremented/decremented, DR-33a (crewless-vehicle counter leak) and DR-33b (UID+tickTime FIFO token) are resolved in master source for both Chernarus and maintained Vanilla Takistan; see Factory queue cleanup. Wave R also found that extra-turret-crew-only vehicle buys, if exposed, can hit the same empty-exit before extra crew creation. |
Use Factory queue cleanup for the branch matrix and patch shape. Always test factory destruction, menu close, empty-vehicle buys, extra-turret-crew selections, repeated purchases and queue hints when touching queues; do not assume cancel/refund semantics exist unless a new branch is added. |
| Cost authority is local | Menu checks funds and calls ChangePlayerFunds locally after spawning build thread. |
Do not add new economy side effects to purchase without tracing client funds, commander income, side supply and PV hardening. |
| Destroyed-factory refund is branch-scoped | The exact docs/current-stable-B74.1/B74.2/historical-release/Miksuu/perf/QoL split is preserved in the destroyed-factory refund branch matrix. Current stable/B74.1/B74.2 and historical a96fdda2 carry a source-present dead/null refund; old-shape branches do not. |
Preserve or port the current-stable/historical-release refund shape when merging, but do not confuse it with server-side purchase authority; smoke factory death, buyer disconnect, empty/crewless vehicles and normal completion. |
| Empty vehicles bypass this group-cap check | Buy menu vehicle-cap math computes optional crew count in _cpt (GUI_Menu_BuyUnits.sqf:93-99,135-140) and only blocks the purchase when _cpt != 0; infantry uses the direct cap check at :132. |
This may be intentional because empty vehicles do not add AI to the buyer's group, but balance docs and Discord AI-cap tables should not count empty-vehicle purchases as squad slots. Smoke crew-toggle combinations if changing caps. |
| B750/B751 buy-list guards and infantry cap are source-present, smoke pending | Current master origin/master@7bfcf09a9 guards nil _c before upgrade reads at Client_UIFillListBuyUnits.sqf:88-92, guards nil _c before faction filtering at Client_UIFillListBuyUnits.sqf:40, and restores infantry cap growth at GUI_Menu_BuyUnits.sqf:137-138 in both maintained roots. |
Do not reopen the older four-at-Barracks-0 cap regression on current-master-shaped targets. Smoke missing unit-data rosters and Barracks level caps before release-ready wording; keep this separate from queue-token, refund and server-authority work. |
| Spawn pads are object-class conventions | Light/heavy/air/barracks pads depend on nearby helper object classes. | Document required map editor objects when adding or moving bases. |
| Attack-wave cost is client-visible state |
ATTACK_WAVE_PRICE_MODIFIER affects list display and purchase cost. |
Keep JIP sync and local modifier state aligned before adding temporary discounts. |
| Buy-menu price/key alignment | The exact docs/current-master/current-stable/historical-release/Miksuu/perf/QoL split is preserved in the buy-menu price and driver-key branch matrix. Current master origin/master@7bfcf09a9 has selected-detail/key mirroring fixed in both maintained roots, but Current master resets UNIT_COST_MODIFIER to 1 at Client_UIFillListBuyUnits.sqf:9 before the upgrade-level branches (labelled 'wiki-wins' fix); the level-0 reset gap is closed. |
Patch/reset the modifier path first, then decide whether current-master dual-key mirroring is enough or one normalized key should replace it; smoke list/detail/charge, funds guard, unit-cost levels 0/1/2, crew toggles, max-out and reset. |
| Special-vehicle color/hint support is incomplete | The briefing claims colored special vehicles, Client_UIFillListBuyUnits.sqf:67-100 colors many support classes, and GUI_Menu_BuyUnits.sqf:442-458 has manual hints/conditions for special purchase classes. |
Treat colored/hinted special vehicles as a UI affordance, not a complete feature registry. Add new support classes to list coloring, detail text, purchase checks and root arrays together. |
When adding or changing purchasable units:
- Define or update the class metadata in the relevant
Common/Config/Core/Core_*.sqffile. - Make sure the metadata fields match
QUERYUNIT*constants, especially price, time, crew, upgrade, factory, faction and turrets. - Add the classname to every intended
Common/Config/Core_Units/Units_*.sqffactory pool. - If the class is a support vehicle, update side root arrays such as
WFBE_<side>REPAIRTRUCKS,AMMOTRUCKS,SUPPLYTRUCKS,SALVAGETRUCK,AMBULANCES,LIFTVEHICLEorARTYVEHICLE. - Check whether AI squad templates or support scripts expect the class.
- Test list filtering by upgrade level, missing/delayed unit metadata, faction dropdown and Barracks-level infantry caps.
- Test queue behavior at the relevant factory and with the factory destroyed mid-build.
- If AI commander/server production must use the class, either verify an active caller for
AIBuyUnitor implement the server caller intentionally. - Run
Tools/LoadoutManagerafter gameplay edits so generated missions receive the source changes. - Update this page, Feature status, Client UI systems atlas and
agent-context.jsonwhen changing purchase authority or config ownership.
- Review whether
Server_BuyUnit.sqfshould be revived, removed from docs as retired, or wired into a new AI commander production design. - Compare every vehicle handler in
Client_BuildUnit.sqfvsServer_BuyUnit.sqfand decide whether drift is acceptable. - Design a minimal server-side validation layer for player purchases that respects Arma 2 locality and does not break hosted/JIP behavior.
- Cross-check depot town purchase with current town-camp ownership logic and supply-truck status.
Previous: Construction and CoIn | Next: Server runtime atlas
Main map: Home | Fast path: Quickstart | Agent file: agent-context.json
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