-
Notifications
You must be signed in to change notification settings - Fork 0
Gear Loadout And EASA Atlas
This page maps the gear purchase, profile-template, aircraft loadout and generated balance systems. It connects the live client UI to the generated SQF emitted by Tools/LoadoutManager.
All mission paths are relative to Missions/[55-2hc]warfarev2_073v48co.chernarus/.
| Need | Start here |
|---|---|
| Change player gear purchase UI |
Client/GUI/GUI_BuyGearMenu.sqf, then Client/Functions/Client_UI_Gear_*.sqf. |
| Fix profile-template persistence |
Gear template profile filter, then Client/Functions/Client_UI_Gear_SaveTemplateProfile.sqf. |
| Fix vehicle/backpack cargo application |
Vehicle cargo equip loop bounds, then Common/Functions/Common_EquipVehicle.sqf and Common_EquipBackpack.sqf. |
| Fix service rearm/refuel/repair/heal affordability parity |
Service menu affordability guards, then Client/GUI/GUI_Menu_Service.sqf. |
| Change gear catalog data |
Common/Config/Config_Weapons.sqf, Config_Magazines.sqf, Config_SetTemplates.sqf, Config_SortWeapons.sqf, Config_SortMagazines.sqf. |
| Change aircraft loadouts |
Tools/LoadoutManager/Data/Vehicles/Aircrafts/**, not generated Client/Module/EASA/EASA_Init.sqf by hand. |
| Change aircraft balance |
Tools/LoadoutManager data classes, then regenerate Common/Functions/Common_BalanceInit.sqf. |
| Debug EASA in-game |
Client/GUI/GUI_Menu_EASA.sqf, Client/Module/EASA/EASA_Equip.sqf, Common/Functions/Common_RearmVehicle.sqf. |
Refreshed 2026-06-24 for gear-template and cargo-loop evidence against current docs/source HEAD@4b9591314c96 / cargo anchor HEAD@c96ee1670ddb, current stable/B74.1 origin/master@f8a76de349da / origin/claude/b74.1-aicom@f8a76de349da, current B74.2 origin/claude/b74.2-aicom@21b62b04, current B69 origin/claude/b69@8d465fce, adjacent B74 origin/claude/b74-aicom-spend@b23f557f, current Miksuu master@b8389e748243, origin/perf/quick-wins@0076040f8a5e, historical release commit a96fdda28087 and historical EASA QoL commit a66d46912e2a. Targeted diffs from the 2026-06-21 gear-template checkpoint 43c3ba05 and the 2026-06-22 checkpoint 72b5f0de98f9 to HEAD over checked profile/template paths returned no source changes; checked d472da6a..21b62b04, origin/master..origin/claude/b74.2-aicom and B69..B74 template deltas are empty. Cargo helper paths are source-unchanged from b2544207 / ebfdca96542f to HEAD; current stable/B74.1, current B74.2, B69, B74 and historical release fix all five cargo loops in both maintained roots, while docs/source, current Miksuu and historical EASA QoL remain old-shape and perf fixes Chernarus only. Checked d472da6a..21b62b04 and origin/master..origin/claude/b74.2-aicom cargo-helper deltas are empty. Service/EASA paths were rechecked through docs/source HEAD@b798fd66 and remain source-unchanged from e9dd7f37, 8906ee89, 9b3fc38e and 8b71e2a1; current B74.2 origin/claude/b74.2-aicom@21b62b04 has no checked service/EASA menu/module/stringtable delta over current stable or the older d472da6a B74.2 snapshot. Current origin exposes no live release/* service/EASA rescue head, but does expose branch-only origin/claude/trello-service-ammo-count@9159f935874e and origin/claude/trello-easa-weapon-categories@0881911849da.
| Area | Branch result | Canonical route |
|---|---|---|
| Profile/template save, import and creation gates | Branch-split after current-stable task 44 and unchanged through current B74.1/B74.2: docs/source 4b9591314c96, current Miksuu b8389e748243, perf 0076040f8a5e, historical release a96fdda28087, historical EASA QoL a66d46912e2a and old upstream miksuu/Gear_template_error@5b056013 keep undefined _u_upgrade in Client_UI_Gear_SaveTemplateProfile.sqf:33,52,75 where the checked helper exists. Current stable/B74.1 origin/master@f8a76de34, current B74.2 21b62b04, B69 8d465fce and B74 b23f557f fix that save-filter comparison in both maintained roots at :34,57,82; checked d472da6a..21b62b04, current-stable-to-B74.2 and B69-to-B74 template deltas are empty. All checked refs still keep the six-field Init_ProfileGear.sqf:17 guard before reading :25, the AddTemplate Barracks-or-Gear gate at Client_UI_Gear_AddTemplate.sqf:136 and Gear-only FillTemplates display at Client_UI_Gear_FillTemplates.sqf:17. Live Trello buy-menu gear-display / EASA category branches have no checked template-path delta. |
Gear template profile filter |
| Vehicle/backpack cargo application | Docs/source HEAD@c96ee1670ddb is source-unchanged from ebfdca96542f / b2544207 for checked cargo helper paths and still carries inclusive loops in both maintained roots. Current Miksuu master@b8389e748243 and historical EASA QoL commit a66d4691 remain old-shape. Current stable/B74.1 origin/master@f8a76de34 / origin/claude/b74.1-aicom@f8a76de34, current B74.2 origin/claude/b74.2-aicom@21b62b04, B69 origin/claude/b69@8d465fce, adjacent B74 origin/claude/b74-aicom-spend@b23f557f and historical release commit a96fdda2 fix all five loops to (count(_items) - 1) in both maintained roots. Checked d472da6a..21b62b04 is empty for cargo helpers. Perf fixes Chernarus only; perf Vanilla remains old-shape. Live origin/claude/trello-buymenu-gear-display@db1291beba and origin/claude/trello-easa-weapon-categories@08819118 have no checked cargo-helper delta. |
Vehicle cargo equip loop bounds |
| Service rearm/refuel/repair/heal | Docs/source HEAD@b798fd66, current Miksuu upstream master@b8389e748243, perf and historical EASA QoL keep the old cached-price/action-debit shape. Current stable/B74.1 origin/master@f8a76de34, current B74.2 origin/claude/b74.2-aicom@21b62b04, current B69 origin/claude/b69@8d465fce, adjacent B74 origin/claude/b74-aicom-spend@b23f557f and historical release commit a96fdda2 use newer controller code and partially guard rearm/refuel in both maintained roots, but repair/heal and broader action-time context/funds checks remain open. The d472da6a..21b62b04 diff is empty for checked service/EASA paths. origin/claude/trello-service-ammo-count@9159f935874e adds ammo-percent UI rows/status in both maintained roots, not affordability closure. |
Service menu affordability guards |
| EASA purchase | Docs/source, current Miksuu upstream, perf, historical release and historical EASA QoL still use strict _funds > price and client-side EASA_Equip / ChangePlayerFunds debit. Current stable/B74.1, current B74.2 origin/claude/b74.2-aicom@21b62b04, current B69 and adjacent B74 are split: source Chernarus uses _funds >= price at GUI_Menu_EASA.sqf:118, but maintained Vanilla remains strict > at the same line. Line drift: docs/Miksuu/perf use GUI_Menu_EASA.sqf:47-49; historical release uses :76-78; historical EASA QoL uses :58-60 in Chernarus and old lines in Vanilla. |
Service menu affordability guards, BuyMenu EASA QoL branch audit |
| EASA QoL / category branches | Historical EASA QoL commit a66d4691 adds current-loadout highlighting/preselect only in Chernarus; it does not fix exact-funds purchase, stale/unsupported context handling, profile templates, cargo loops or maintained Vanilla propagation. Current origin exposes no feat/buymenu-easa-qol head on 2026-06-23. Branch-only origin/claude/trello-easa-weapon-categories@0881911849da supplies the missing WFBE_EASA_FNC_LoadoutCat compile/file (EASA_Init.sqf:2, EASA_LoadoutCat.sqf:1-57) for the already-present guarded category call site (GUI_Menu_EASA.sqf:34-36); it is not exact-funds, stale-context or authority closure. |
BuyMenu EASA QoL branch audit, Service menu affordability guards |
flowchart TD
GearConfig["Common/Config gear catalogs"] --> GearPools["WFBE_%SIDE_* gear pools"]
GearPools --> BuyGear["GUI_BuyGearMenu.sqf"]
Profile["profileNamespace WFBE_PERSISTENT_%SIDE_GEAR_TEMPLATE"] --> BuyGear
BuyGear --> EquipUnit["Common_EquipUnit.sqf"]
BuyGear --> EquipVehicle["Common_EquipVehicle.sqf"]
BuyGear --> Funds["ChangeClientFunds / wfbe_funds"]
CSharp["Tools/LoadoutManager aircraft data"] --> GeneratedEASA["Client/Module/EASA/EASA_Init.sqf"]
CSharp --> GeneratedBalance["Common/Functions/Common_BalanceInit.sqf"]
GeneratedEASA --> EASAUI["GUI_Menu_EASA.sqf"]
EASAUI --> EASAEquip["EASA_Equip.sqf"]
EASAEquip --> VehicleState["vehicle WFBE_EASA_Setup"]
VehicleState --> Rearm["Common_RearmVehicle.sqf"]
GeneratedBalance --> Rearm
Gear metadata is stored in missionNamespace under weapon class names and Mag_<class> names.
| Source | Responsibility | Evidence |
|---|---|---|
Common/Config/Config_Weapons.sqf |
Defines weapon metadata and price/upgrade/category fields. | Config_Weapons.sqf:20-42 |
Common/Config/Config_Magazines.sqf |
Defines magazine metadata using Mag_<class> keys. |
Config_Magazines.sqf:16-32 |
Common/Config/Config_SortWeapons.sqf |
Builds side pools such as WFBE_%SIDE_Primary, Pistols, Secondary, Equipment, All. |
Config_SortWeapons.sqf:19-57 |
Common/Config/Config_SortMagazines.sqf |
Builds side magazine pools. | Config_SortMagazines.sqf:13-29 |
Common/Config/Config_SetTemplates.sqf |
Builds side template arrays under WFBE_%SIDE_Template. |
Config_SetTemplates.sqf:33-47, :113-132
|
The buy-gear dialog fills its views from those side pools. GUI_BuyGearMenu.sqf:122-130 selects templates or side gear arrays based on the current tab.
Rsc/Dialogs.hpp:554-557 loads Client/GUI/GUI_BuyGearMenu.sqf for WFBE_BuyGearMenu (idd=503000). Client init compiles the gear helpers at Client/Init/Init_Client.sqf:165-175.
The controller is a fast polling UI loop:
- It uses
WFBE_MenuActionaction codes rather thanMenuAction(GUI_BuyGearMenu.sqf:27,:47-62). - It updates views for
gear,backpackandvehiclemodes (GUI_BuyGearMenu.sqf:144-146). - It applies purchases locally through
WFBE_CO_FNC_EquipUnitorWFBE_CO_FNC_EquipVehicle(GUI_BuyGearMenu.sqf:429,:439). - It deducts money client-side with
WFBE_CL_FNC_ChangeClientFunds(GUI_BuyGearMenu.sqf:441). - It sleeps
0.01while open (GUI_BuyGearMenu.sqf:503).
This is a legacy client-authoritative path. It fits the broader economy ceiling from Deep-review findings DR-14 and DR-16: buying units, selling structures and gear/EASA purchases all rely on trusted client-side checks and money mutation unless a future redesign introduces server validation or BattlEye script filters.
Profile templates are loaded only when the OA version gate compiles the profile functions (Client/Init/Init_Client.sqf:224-227). The profile key is:
WFBE_PERSISTENT_%SIDE_GEAR_TEMPLATE
Evidence:
-
Client/Init/Init_ProfileVariables.sqf:37-42reads the profile key. -
Client/Init/Init_ProfileGear.sqf:128-144validates and replaces side templates. -
Client/Functions/Client_UI_Gear_SaveTemplateProfile.sqf:94-95writes the profile key and callssaveProfileNamespace.
The _u_upgrade undefined-variable bug is branch-split. Current docs/source, Miksuu, perf, historical release, historical EASA QoL and old upstream miksuu/Gear_template_error still reference _u_upgrade at Client_UI_Gear_SaveTemplateProfile.sqf:33,52,75 where the checked helper exists. 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 fix task 44 in both maintained roots: the weapon, magazine and backpack loops now compare _get select 3 (the item's own required upgrade level) against both _upgrade_barracks and _upgrade_gear at :34,57,82. The d472da6a..21b62b04 diff is empty for checked template paths. The focused patch shape and smoke plan remain in Gear template profile filter for docs/source and old-shape refs.
The visible template list also filters by current gear upgrade (Client_UI_Gear_FillTemplates.sqf:15-22). Higher-upgrade saved templates can be valid but hidden until the side upgrades gear again; support/debug docs should distinguish hidden-by-upgrade from deleted profile data.
Template creation has a separate UX/support trap. Client_UI_Gear_AddTemplate.sqf:34-132 rejects foreign weapons, magazines and backpack items when WFBE_Allow_HostileGearSaving is false, then exits with a generic "foreign equipment" hint at :132. It can also reject an otherwise well-formed template when its max upgrade is above current gear or barracks level (:150). Because the current source initializes WFBE_Allow_HostileGearSaving = true in Init_Client.sqf:10, this foreign-equipment refusal is a dormant/config-sensitive behavior in the checked-in profile, not the default live path. If that flag is ever tightened, add clearer UI copy and smoke hostile gear, backpacks, saved profile rows and higher-upgrade templates together.
The buy-gear dialog also has a template-coverage gap for vehicle/backpack cargo. Template creation at GUI_BuyGearMenu.sqf:454 passes only selected weapons, magazines and backpack content into WFBE_CL_FNC_UI_Gear_AddTemplate; the nearby TODO at :482 still says "template for veh / bp". Price calculation does include vehicle/backpack content at :485, so a purchase can still apply those selections, but profile-template persistence is not a full snapshot of the visible vehicle/backpack gear state. Support docs should distinguish "purchase can apply cargo" from "template can save cargo".
EASA is the aircraft loadout system. It is not an Arma 3 pylon system; it is Arma 2 OA weapon/magazine mutation.
| Step | Source | Notes |
|---|---|---|
| Service menu opens EASA |
Client/GUI/GUI_Menu_Service.sqf:30-37, :240-244
|
Requires service context, driver and EASA upgrade gating. |
| Dialog loads aircraft rows | Client/GUI/GUI_Menu_EASA.sqf:3-5 |
Reads WFBE_EASA_Vehicles and WFBE_EASA_Loadouts. |
| AA rows are filtered | GUI_Menu_EASA.sqf:16-20 |
Uses WFBE_C_GAMEPLAY_AIR_AA_MISSILES and WFBE_UP_AIRAAM. |
| Purchase applies loadout | GUI_Menu_EASA.sqf:46-50 |
Calls EASA_Equip, deducts funds with ChangePlayerFunds. |
| Equip mutates vehicle | Client/Module/EASA/EASA_Equip.sqf:28-36 |
Adds magazines/weapons; Wildcat uses turret-specific commands. |
| Vehicle stores chosen setup | EASA_Equip.sqf:36 |
WFBE_EASA_Setup is public vehicle state. |
| Rearm reapplies setup | Common/Functions/Common_RearmVehicle.sqf:65-69 |
Reapplies saved EASA setup after balance/AA restriction pass. |
EASA_Init.sqf:667-668 marks AA missile rows by checking each loadout magazine's CfgMagazines >> ammo, then CfgAmmo >> airLock and inherited class MissileBase, then stores:
WFBE_EASA_VehiclesWFBE_EASA_LoadoutsWFBE_EASA_Default
Focused EASA review found two local correctness edges in the menu flow:
-
GUI_Menu_EASA.sqf:40-53uses_funds > price, so an exact-funds purchase is rejected and can display "missing $0" even though the player has the listed price. - The service menu opens EASA from a cached vehicle/context snapshot, and
EASA_Equip.sqf:8-38silently exits if the current vehicle is unsupported. Without an action-time recheck, a stale menu can debit/show success while equipping nothing. -
GUI_Menu_EASA.sqf:3-4has an earlier fail-open variant: when the dialog loads on an unsupported current vehicle, it exits after logging"GUI_Menu_EASA.sqf: Player vehicle [%1] was not found within the list."but does notcloseDialog 0. Treat blank/partial EASA surfaces as stale-context evidence, not just cosmetic UI weirdness.
Historical EASA QoL commit a66d4691 adds EASA current-loadout highlighting/preselect in the menu (GUI_Menu_EASA.sqf:29-40) but does not change the purchase action at GUI_Menu_EASA.sqf:46-50 or EASA_Equip.sqf. Current origin exposes no feat/buymenu-easa-qol head on 2026-06-23, so treat that commit as historical UI-orientation evidence only. Current stable/B74.1/B74.2 fix exact-funds purchase in source Chernarus only; maintained Vanilla and old-shape refs still reject exact funds, and stale/unsupported context gates remain open. See BuyMenu EASA QoL branch audit and Service menu affordability guards.
Current stable/B74.1 also contains display-only EASA category scaffolding: WFBE_C_EASA_CATEGORIES defaults on in Chernarus Init_CommonConstants.sqf:821 and maintained Vanilla :623, and the EASA menu prefixes row labels only when WFBE_EASA_FNC_LoadoutCat exists (GUI_Menu_EASA.sqf:34-36). origin/claude/trello-easa-weapon-categories@0881911849da is the branch-only wiring candidate that compiles the helper from EASA_Init.sqf:2 and adds the classifier file in both maintained roots. Smoke category labels and maintained Vanilla exact-funds separately before any promotion wording.
Claude DR-28 completed the source review for EASA and vehicle service actions. The flow is client-authoritative:
-
GUI_Menu_EASA.sqf:46-50performs the affordability check on the client, callsEASA_Equip, then debits viaChangePlayerFunds. -
EASA_Equip.sqf:28-36mutates the local aircraft withaddWeapon/addMagazineor turret variants, then only broadcasts the chosenWFBE_EASA_Setupindex. -
GUI_Menu_Service.sqfrearm (MenuAction == 1, current stable/B74.1 line:484) and refuel (MenuAction == 3,:507) both guard the debit with an explicit_funds >= pricecheck in current stable/B74.1/B74.2/B69/B74 (comment: "QoL: affordability guard (parity with repair/heal)"). Repair (MenuAction == 2,:496-497) debits when_repairPrice > 0and heal (MenuAction == 5,:519-520) when_healPrice > 0, relying on button-disable state rather than an action-time funds comparison. The residual gap — repair and heal lacking explicit action-time funds checks — is documented in Service menu affordability guards.
This is not a separate one-off bug class. It completes the economy authority map: build, buy, sell, side supply, upgrades, ICBM/special weapons, gear, EASA and service actions all rely on client-side spend/effect authority unless a future hardening pass moves the ledger and effect validation server-side or constrains the client with BattlEye script filters.
Tools/LoadoutManager/Program.cs:6 runs SqfFileGenerator.GenerateCommonBalanceInitAndTheEasaFileForEachTerrain().
The generator writes:
| Generated target | Writer evidence | Purpose |
|---|---|---|
Client/Module/EASA/EASA_Init.sqf |
Data/Terrains/BaseTerrain.cs:99 |
Vehicle list, loadout rows and default EASA setup. |
Common/Functions/Common_BalanceInit.sqf |
BaseTerrain.cs:100 |
Generated vehicle balance mutations. |
Common/Common_ReturnAircraftNameFromItsType.sqf |
BaseTerrain.cs:101 |
Aircraft display/radar-name helper. |
version.sqf |
BaseTerrain.cs:102 |
Terrain-specific generated version metadata. |
Common/Functions/Common_ModifyAirVehicle.sqf insertion block |
BaseTerrain.cs:84-86 |
Generated aircraft damage-model changes. |
Do not hand-edit generated EASA/balance output unless you are making an emergency local experiment and plan to port it back into the C# data model. The next LoadoutManager run can overwrite generated SQF.
Common/Functions/Common_BalanceInit.sqf:3-4 intentionally exits on server to prevent an occasional freeze:
if (isServer) exitWith {};That creates a subtle locality edge:
-
Server/Functions/Server_BuyUnit.sqf:139callsBalanceIniton server-created vehicles, but generated balance exits immediately there. -
Common/Functions/Common_RearmVehicle.sqf:50callsBalanceInitduring rearm on whoever runs the script. -
Server_BuyUnit.sqf:157-160andCommon_RearmVehicle.sqf:55-58also callWFBE_CO_FNC_RemoveAAMissilesbased onWFBE_C_GAMEPLAY_AIR_AA_MISSILESandWFBE_UP_AIRAAM.
AA policy is path-dependent. EASA filters AA rows through WFBE_C_GAMEPLAY_AIR_AA_MISSILES and WFBE_UP_AIRAAM (GUI_Menu_EASA.sqf:15-20), client build and server buy paths also call WFBE_CO_FNC_RemoveAAMissiles (Client_BuildUnit.sqf:287-293; Server_BuyUnit.sqf:155-162), and rearm reapplies the same gate (Common_RearmVehicle.sqf:53-60). Start/pre-placed vehicles and unusual creation paths still need live smoke before claiming every aircraft/SAM follows the same AA policy.
Safe rule: when changing aircraft balance or AA loadouts, test initial spawn, start vehicles, purchased vehicles, EASA purchase and service/rearm behavior separately. A client-side rearm path may apply balance that a server-side spawn path skips.
The C# data model contains explicit crash-warning classes:
| Source | Evidence |
|---|---|
Tools/LoadoutManager/Data/Weapons/WeaponType.cs |
WARNING_GAME_CRASH_DO_NOT_USE_IN_LOADOUTS_CRV7PG maps to CRV7_PG at :121-122. |
Tools/LoadoutManager/Data/Ammunition/AmmunitionType.cs |
The matching warning ammunition enum exists under the singular Data/Ammunition folder. |
Tools/LoadoutManager/Data/Ammunition/Implementations/.../WARNING_GAME_CRASH_DO_NOT_USE_IN_LOADOUTS_TWELVEROUNDCRV7PG.cs |
Warning implementation exists for the 12-round CRV7PG ammunition. |
Tools/LoadoutManager/Data/Vehicles/Aircrafts/Implementations/BLUFOR/WILDCAT.cs |
Wildcat vanilla turret default references the warning ammunition at :35-38. |
Treat WARNING_GAME_CRASH_DO_NOT_USE_IN_LOADOUTS_* as hard blockers, not normal TODO names. Do not copy them into new loadouts without testing the exact vehicle/turret behavior in Arma 2 OA.
| Risk | Evidence | Recommended action |
|---|---|---|
| Gear purchase, EASA purchase and service actions are client-authoritative. |
GUI_BuyGearMenu.sqf:429-441, GUI_Menu_EASA.sqf:46-50, EASA_Equip.sqf:28-36, GUI_Menu_Service.sqf:196-200, :217-219; Claude DR-28. |
For public-server hardening, decide between a server funds/effects ledger and BattlEye script filters. If touching service code first, use Service menu affordability guards for local price/funds/context parity, but treat that as a correctness patch rather than real anti-cheat. |
| EASA exact-funds and stale-context handling are locally wrong. |
GUI_Menu_EASA.sqf:3-4 exits early on unsupported current vehicle without closing the dialog; :40-53 rejects _funds == price; GUI_Menu_Service.sqf:30-41, :240-244 and EASA_Equip.sqf:8-38 allow stale/unsupported vehicle context to no-op after menu selection. |
Recheck current vehicle, support eligibility, selected row and funds at action time; close or recover the dialog on unsupported vehicles; use >= for affordability if exact cash should buy the listed loadout. Smoke exact-price, under-price, unsupported/stale vehicle and driver-switch cases. |
Profile template upgrade filtering references undefined _u_upgrade on docs/source and old-shape refs. |
Docs/source, Miksuu, perf, historical release, historical EASA QoL and old upstream miksuu/Gear_template_error keep Client_UI_Gear_SaveTemplateProfile.sqf:33, :52, :75 where the helper exists; current stable/B74.1 origin/master@f8a76de34, current B74.2 21b62b04, B69 and adjacent B74 fix the comparisons at :34, :57, :82, with d472da6a..21b62b04 empty for checked template paths. Gear template profile filter owns the patch shape and branch matrix. |
Patch old-shape targets before trusting saved templates to enforce upgrade gates; do not reopen the save-filter edit on current stable/B74-shaped refs. |
| Profile template import guard allows six-element rows before reading index 6. |
Client/Init/Init_ProfileGear.sqf:17 accepts count _x >= 6, then :25 reads _x select 6 for backpack data; Gear template profile filter and Current Branch Scope preserve the branch matrix. |
Require count _x >= 7 before selecting backpack data, or branch old six-field templates through a compatibility default. Smoke old profile rows and current seven-field rows. |
| Buy-gear templates do not fully capture vehicle/backpack cargo selections. |
GUI_BuyGearMenu.sqf:454 passes only weapon, magazine and backpack-content arrays into AddTemplate; :482 still carries a vehicle/backpack template TODO; :485 includes vehicle/backpack content in price calculation. |
Decide whether templates should save the full visible buy-gear state. If yes, extend the template schema deliberately and add old-profile compatibility gates. |
Respawn penalty mode 5 can skip custom gear at base/HQ despite no charge. |
Client_OnRespawnHandler.sqf:54-70; Respawn and death lifecycle atlas. |
If mode 5 means charge-on-mobile only, make _skip respect _charge; smoke custom gear respawn at base and mobile with insufficient funds. |
| Vehicle/backpack cargo equip loops overrun by one. |
Common_EquipVehicle.sqf:27,33,39 and Common_EquipBackpack.sqf:35,41 use inclusive for '_i' from 0 to count(_items) bounds in old-shape targets; Vehicle cargo equip loop bounds owns the fix route and Current Branch Scope preserves the branch split. Current stable/B74.1/current B74.2/B69/B74/release-shaped refs already use (count(_items) - 1) in both maintained roots. |
Port or preserve the fixed loop bounds for any target branch still carrying inclusive loops, including docs/source, current Miksuu b8389e748243, historical EASA QoL and perf Vanilla, then propagate Vanilla and smoke cargo application. |
| Buy-gear click-pool bounds are not currently proven off-by-one. |
GUI_BuyGearMenu.sqf:44-45 accepts one-based click slots with <= _size; Dialogs.hpp emits magazine slot IDs as 1..12 and gun slot IDs as 1..8, and Client_RemoveMagazineGear.sqf:21 treats the value as one-based cumulative size. |
Do not file this as a confirmed bug. A small hardening patch could still reject < 1 before calling remove. |
| EASA/Economy duplicate dialog IDD. |
Rsc/Dialogs.hpp:3209-3212, :3287-3290; Claude DR-17. UI IDD collision repair owns the exact branch matrix and smoke checklist. |
Preserve or port the stable/release dialog IDD split before adding scripts that use display-ID lookup. |
| Balance exits on server, but server spawn code calls it. |
Common_BalanceInit.sqf:3-4, Server_BuyUnit.sqf:139
|
Test spawn/rearm separately; document intended locality before moving balance logic. |
| AA missile gating is not proven universal. |
GUI_Menu_EASA.sqf:15-20, Client_BuildUnit.sqf:287-293, Server_BuyUnit.sqf:155-162, Common_RearmVehicle.sqf:53-60. |
Smoke start/pre-placed aircraft, purchased aircraft, SAMs, EASA loadouts and service rearm before treating WFBE_C_GAMEPLAY_AIR_AA_MISSILES / WFBE_UP_AIRAAM as complete coverage. |
| Generated files can be overwritten. | BaseTerrain.cs:99-102 |
Change LoadoutManager data classes first, then regenerate. |
| Crash-warning CRV7PG metadata still exists. |
WeaponType.cs:121-122, WILDCAT.cs:35-38
|
Keep warning names visible and avoid using them in new loadout combinations. |
- Edit gear catalog SQF for infantry/vehicle cargo metadata; edit LoadoutManager C# for aircraft/EASA/balance metadata.
- After changing mission SQF, remember the Chernarus source mission is canonical; generated missions require LoadoutManager propagation.
- After changing LoadoutManager, inspect generated
EASA_Init.sqfandCommon_BalanceInit.sqfdiffs before trusting the output. - Do not confuse
RscMenu_Economy(idd 23000) withRscMenu_EASA(idd 24000) when scripting display-ID lookups. On branches that predate UI IDD collision repair, verify actual IDD values before using numeric display-ID targets. - Do not assume server-side validation exists for gear/EASA funds or upgrade gates.
[
{"fact":"gear_metadata_store","source":"Common/Config/Config_Weapons.sqf:34-42; Config_Magazines.sqf:24-32","summary":"Weapon and magazine metadata are missionNamespace-backed arrays keyed by class name or Mag_<class>."},
{"fact":"gear_templates_profile_key","source":"Client_UI_Gear_SaveTemplateProfile.sqf:94","summary":"Saved gear templates persist under WFBE_PERSISTENT_%SIDE_GEAR_TEMPLATE."},
{"fact":"gear_purchase_authority","source":"GUI_BuyGearMenu.sqf:429-441","summary":"Gear purchases apply equipment and deduct funds client-side."},
{"fact":"easa_generated_runtime","source":"BaseTerrain.cs:99; EASA_Init.sqf:668","summary":"EASA runtime arrays are generated by LoadoutManager, then published as WFBE_EASA_Vehicles/Loadouts/Default."},
{"fact":"easa_vehicle_state","source":"EASA_Equip.sqf:36; Common_RearmVehicle.sqf:65-69","summary":"The selected EASA setup is stored on the vehicle as public WFBE_EASA_Setup and reapplied during rearm."},
{"fact":"easa_authority_dr28","source":"GUI_Menu_EASA.sqf:46-50; EASA_Equip.sqf:28-36","summary":"EASA affordability, debit and loadout application are client-side; the server receives only public vehicle setup state."},
{"fact":"easa_exact_funds_stale_context","source":"GUI_Menu_EASA.sqf:40-53; GUI_Menu_Service.sqf:30-41,240-244; EASA_Equip.sqf:8-38","summary":"EASA rejects exact-funds purchases and can no-op after stale/unsupported vehicle context unless action-time guards are added."},
{"fact":"service_authority_dr28","source":"GUI_Menu_Service.sqf:196-200; GUI_Menu_Service.sqf:217-219","summary":"Vehicle service rearm/refuel debit unconditionally and run client-local effects without a server authority check; Service-Menu-Affordability-Guards.md owns the small local parity patch."},
{"fact":"gear_easa_branch_scope_2026_06_24","source":"docs/source HEAD@4b9591314c96 profile/template paths, HEAD@c96ee1670ddb cargo paths and HEAD@b798fd66 service/EASA paths; origin/master@f8a76de34 / origin/claude/b74.1-aicom@f8a76de34; origin/claude/b74.2-aicom@21b62b04 plus d472da6a..21b62b04 empty for checked profile/template, cargo and service/EASA paths; origin/claude/b69@8d465fce; origin/claude/b74-aicom-spend@b23f557f; current Miksuu master@b8389e748243; perf/quick-wins@0076040f; historical release a96fdda2; historical EASA QoL a66d4691; origin/claude/trello-service-ammo-count@9159f935; origin/claude/trello-easa-weapon-categories@08819118; origin/claude/trello-buymenu-gear-display@db1291beba","summary":"Gear profile/template save filtering is branch-split: docs/source and old refs keep undefined _u_upgrade, while current stable/B74.1/B69/B74/B74.2 fix it in both maintained roots. The six-field profile import guard and template creation/display policy remain open across checked refs; cargo loops are fixed on current stable/B74.1/B69/B74/B74.2 and historical release, but current Miksuu, perf Vanilla and docs/EASA old-shape targets still need the loop-bound port. Service/EASA remains partial and is current-B74.2-head verified at 21b62b04 for checked paths: stable-shaped refs guard service rearm/refuel only and fix Chernarus EASA exact-funds, but repair/heal, Vanilla exact-funds, stale-context checks and server authority remain open. Trello service ammo-count, EASA weapon-category and buy-menu gear-display branches are branch-only UI/wiring evidence, not template-path, cargo-loop, authority or affordability closure."},
{"fact":"balance_server_exit","source":"Common_BalanceInit.sqf:3-4; Server_BuyUnit.sqf:139","summary":"Generated balance exits on server even though server buy code calls it."},
{"fact":"crv7pg_warning","source":"WeaponType.cs:121-122; WILDCAT.cs:35-38","summary":"CRV7PG warning metadata is explicitly marked as game-crash dangerous and still referenced in Wildcat data."}
]Previous: Client UI systems atlas | Next: Tools/build workflow
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