-
Notifications
You must be signed in to change notification settings - Fork 0
Defense Category And Budget Reference
Source-verified 2026-07-12 against master 9d7482116. Paths relative to Missions/[55-2hc]warfarev2_073v48co.chernarus/ unless noted. Arma 2 OA 1.64.
Player- and commander-placed base defenses are not free-for-all: each placement is sorted into one of four budget categories, and the server enforces a per-category live-object cap; fortification and mine caps scale with barracks level while the statics cap is a flat constant. This page documents the two halves of that mechanism — the categorizer WFBE_CO_FNC_GetDefenseCategory (Common/Functions/Common_GetDefenseCategory.sqf) and its sole consumer, the RequestDefense server handler (Server/PVFunctions/RequestDefense.sqf) — plus the tuning constants in Common/Init/Init_CommonConstants.sqf that set the caps and gate thresholds. This is the contract and gate logic, distinct from Defense-Structures-Catalog, which lists the actual defense classnames and their prices.
The whole gate layer is opt-in behind one constant: WFBE_C_DEFENSE_BUDGET (Common/Init/Init_CommonConstants.sqf:1898, default 1). When it is 0, RequestDefense builds exactly as it did before the budget feature existed (Server/PVFunctions/RequestDefense.sqf:298-305).
Registered as WFBE_CO_FNC_GetDefenseCategory = Compile preprocessFileLineNumbers "Common\Functions\Common_GetDefenseCategory.sqf" (Common/Init/Init_Common.sqf:172).
| Aspect | Detail | Citation |
|---|---|---|
| Parameters |
_this select 0 = classname (String), _this select 1 = side (Side) |
Common/Functions/Common_GetDefenseCategory.sqf:24-25 |
| Returns | One of "STATICS", "FORTIFICATIONS", "MINES", "OTHER" (String) |
Common/Functions/Common_GetDefenseCategory.sqf:17 |
| Default |
_cat = "OTHER" — anything unmatched is OTHER and uncapped in v1
|
Common/Functions/Common_GetDefenseCategory.sqf:62, :106-108
|
| Side use | Side is stringified (str _side) only to build the faction static-array variable names |
Common/Functions/Common_GetDefenseCategory.sqf:72 |
The function returns on the first match, evaluated top to bottom:
| Order | Category | Test | Citation |
|---|---|---|---|
| 1 | MINES |
_cls == "Sign_Danger" (the mine-field placer; faction-neutral) |
Common/Functions/Common_GetDefenseCategory.sqf:67 |
| 2 | STATICS |
_cls in _staticsList (faction arrays) or substring match on the crewable-weapon needle list |
Common/Functions/Common_GetDefenseCategory.sqf:86, :91-98
|
| 3 | FORTIFICATIONS | substring match on the barrier/wire/wall needle list | Common/Functions/Common_GetDefenseCategory.sqf:103 |
| 4 | OTHER | fall-through (ammo crates, MASH, lights, spawn markers) | Common/Functions/Common_GetDefenseCategory.sqf:108 |
The faction-specific static-weapon arrays are read by name from missionNamespace and concatenated into one list (Common/Functions/Common_GetDefenseCategory.sqf:73-80):
WFBE_<side>DEFENSES_MG / _GL / _AAPOD / _ATPOD / _CANNON / _MORTAR
These are populated per-faction in the Core_Structures config files — e.g. WFBE_<side>DEFENSES_MG = ['M2StaticMG_US_EP1'] (Common/Config/Core_Structures/Structures_CO_US.sqf:229), ['KORD_high_TK_EP1'] for RU (Common/Config/Core_Structures/Structures_CO_RU.sqf:227), ['DSHKM_CDF'] for CDF (Common/Config/Core_Structures/Structures_CDF.sqf:158). Any classname found in the merged list sets _isStatic = true (Common/Functions/Common_GetDefenseCategory.sqf:86).
Classnames not in the faction arrays (e.g. sandbag MG nests, or any other faction's gun reused) get a second pass: a substring scan over a fixed needle list of crewable-weapon tokens (Common/Functions/Common_GetDefenseCategory.sqf:93):
mgnestt, mgbag, mgnest, m2staticmg, kord, dshkm, zu23, ags, mk19, tow,
stinger, igla, metis, spg9, m252, 2b14, m119, d30, mlrs,
baf_gpmg, baf_gmg, baf_l2a1, m2hd, m1129
A match here also sets _isStatic = true; if static, the function exits "STATICS" (Common/Functions/Common_GetDefenseCategory.sqf:94, :98). The searchlight is deliberately left as OTHER because it is non-crewable for combat (Common/Functions/Common_GetDefenseCategory.sqf:90).
A single substring pass over the barrier/obstacle needle list returns "FORTIFICATIONS" (Common/Functions/Common_GetDefenseCategory.sqf:103):
hbarrier, barrier5x, barrier10x, bagfence, razorwire, hedgehog, hhedgehog,
camonet, camo_net, fort_rampart, fort_artillery, fortified_nest,
concrete_wall, cncblock
| Guard | What it does | Why | Citation |
|---|---|---|---|
_matchAny substring matcher |
Hand-rolled toArray-based substring search; _this = [haystackLower, [needle, ...]], returns a Boolean |
find on a String is an Arma 3 command; on A2 OA it throws "Type String, expected Array" and killed the calling script (RequestDefense mid-purchase, live-burned 2026-06-11) |
Common/Functions/Common_GetDefenseCategory.sqf:31-55, comment :27-30
|
| nil/non-string entry guard | `if (isNil "_cls" | {typeName _cls != "STRING"}) exitWith {"OTHER"}` |
The _matchAny block uses only A2-safe constructs (toArray, count, forEach, for, exitWith), and all callers lowercase the haystack before passing it (Common/Functions/Common_GetDefenseCategory.sqf:93, :103).
RequestDefense.sqf is the server PVF handler that fires when a client requests a base defense. Its signature (Server/PVFunctions/RequestDefense.sqf:1-8): [_side, _defenseType, _pos, _dir, _manned, _builtByRepairTruck?, _reqPlayer?]. The trailing two args are optional (default false / objNull) to stay compatible with the EASA repair-truck merge.
The handler only proceeds if _defenseType resolves in the side's WFBE_<side>DEFENSENAMES list (Server/PVFunctions/RequestDefense.sqf:11-12). It then enters the budget/threat gate only when WFBE_C_DEFENSE_BUDGET > 0 (Server/PVFunctions/RequestDefense.sqf:24).
| Step | Logic | Citation |
|---|---|---|
| A. Base-center detection | Mirrors the RequestStructure bank pattern: collect getPos of wfbe_startpos + each wfbe_basearea from the side logic; nearest center within WFBE_C_BASE_AREA_RANGE (default 250) → _isInsideBase
|
Server/PVFunctions/RequestDefense.sqf:43-60 |
| (gate skip) | If not inside a base area, budget does not apply — build immediately | Server/PVFunctions/RequestDefense.sqf:289-296 |
| B1. Barracks level |
_barrackLvl = _upgrades select WFBE_UP_BARRACKS (index 0) |
Server/PVFunctions/RequestDefense.sqf:70-72 |
| B2. Anchor vs single | If _defenseType is in WFBE_POSITION_ANCHOR_NAMES, expand to ALL template children (resolved via WFBE_POSITION_TEMPLATE_MAP + optional _WEST/_EAST suffix); else _clsToCheck = [_defenseType]
|
Server/PVFunctions/RequestDefense.sqf:79-108 |
| B3. Threat gate | See below | Server/PVFunctions/RequestDefense.sqf:116-141 |
| B3b. Composition cap | Anchors only — see below | Server/PVFunctions/RequestDefense.sqf:152-168 |
| B4. Budget cap | Single defenses only — see below | Server/PVFunctions/RequestDefense.sqf:179-240 |
| B5. Reject + refund / build | See refund section | Server/PVFunctions/RequestDefense.sqf:245-287 |
The handler classifies every entry in _clsToCheck with WFBE_CO_FNC_GetDefenseCategory; if any is STATICS or MINES, the placement is threat-gated (Server/PVFunctions/RequestDefense.sqf:119-122). Fortifications and OTHER are never threat-gated (Server/PVFunctions/RequestDefense.sqf:112-114).
When gated, it counts enemy ground units near the base center and rejects if the count meets WFBE_C_DEFENSE_THREAT_MIN (default 3):
- Enemy side =
[west, east] - [_side](no ambient GUER) (Server/PVFunctions/RequestDefense.sqf:131). - Counted classes =
["Man","Car","Motorcycle","Tank"](no Air) within_baseRange(Server/PVFunctions/RequestDefense.sqf:134). - Threshold check at
Server/PVFunctions/RequestDefense.sqf:137; the 2026-06-10 play-test rationale (the original any-1-enemy/any-class gate near-permanently blocked placement; ambient resistance AI and overflights counted as a "raid") is in the comment at:126-130.
Anchors only. Counts distinct WFBE_WDDMPositionAnchor placement-IDs on nearby defense objects; rejects with _rejCat = "WddmCompositionCapReached" once the distinct count reaches WFBE_C_WDDM_COMP_CAP (default 3, size-independent) (Server/PVFunctions/RequestDefense.sqf:152-167).
Single (non-anchor) defenses only; WDDM composition children are exempt here (their cap is B3b). The pending placement is classified, then existing live, non-child objects of the same category are counted near the base center via nearestObjects, and the request is rejected if existing + pending > cap (Server/PVFunctions/RequestDefense.sqf:179-235).
| Category | Cap formula | Default | Reject label | Citation |
|---|---|---|---|---|
| STATICS |
WFBE_C_BASE_DEFENSE_STATICS_CAP (flat) |
25 | Statics |
Server/PVFunctions/RequestDefense.sqf:193, :227-228
|
| FORTIFICATIONS | 20 + 10 * _barrackLvl |
20 (lvl 0) | Fortifications |
Server/PVFunctions/RequestDefense.sqf:194, :230-231
|
| MINES | 10 + 5 * _barrackLvl |
10 (lvl 0) | Mines |
Server/PVFunctions/RequestDefense.sqf:195, :233-234
|
The existing-count loops skip any object flagged WFBE_WDDMPositionChild so composition pieces never consume single-defense budget slots (Server/PVFunctions/RequestDefense.sqf:213, :218, :223).
If either gate fired and _reqPlayer is alive, the player is refunded (defenses are charged optimistically on the client at placement). The server first tries to price the defense server-side via missionNamespace getVariable _defenseType then select QUERYUNITPRICE (index 2, Common/Init/Init_CommonConstants.sqf:8) (Server/PVFunctions/RequestDefense.sqf:249-252).
| Case | Message sent | Refund arg | Citation |
|---|---|---|---|
| Price resolved, threat reject | ["DefenseThreatGate", _defPrice] |
number | Server/PVFunctions/RequestDefense.sqf:255-256 |
| Price resolved, comp-cap reject | ["WddmCompositionCapReached", _rejUsed, _rejCap, _defenseType] |
— | Server/PVFunctions/RequestDefense.sqf:258-259 |
| Price resolved, budget reject | ["DefenseBudgetFull", _rejCat, _rejUsed, _rejCap, _defPrice] |
number | Server/PVFunctions/RequestDefense.sqf:260-261 |
| Price NOT resolvable (WDDM anchors) | same keys but pass _defenseType classname so the client refunds via its own lookup |
classname string | Server/PVFunctions/RequestDefense.sqf:264-277 |
The classname-fallback exists because anchors lost their 2,500–5,000 cash on threat reject when the server could only notify with 0 (Server/PVFunctions/RequestDefense.sqf:265-267). The client-side LocalizeMessage handler accepts either a number (refund directly) or a classname string (look up select QUERYUNITPRICE and refund the exact amount it charged) for both DefenseBudgetFull (Client/PVFunctions/LocalizeMessage.sqf:132-144) and DefenseThreatGate (Client/PVFunctions/LocalizeMessage.sqf:165-178); the WddmCompositionCapReached branch always refunds via the anchor classname lookup (Client/PVFunctions/LocalizeMessage.sqf:147-156).
When all gates pass, the build dispatches: anchors → Server_ConstructPosition (Spawn), single defenses → ConstructDefense (Call) with the manning range and repair-truck flag (Server/PVFunctions/RequestDefense.sqf:280-287).
| Constant | Default | Meaning | Citation |
|---|---|---|---|
WFBE_C_DEFENSE_BUDGET |
1 | Master switch for the whole gate layer | Common/Init/Init_CommonConstants.sqf:1898 |
WFBE_C_BASE_DEFENSE_STATICS_CAP |
25 | Flat STATICS cap per base area (raised from 10) | Common/Init/Init_CommonConstants.sqf:1899 |
WFBE_C_DEFENSE_THREAT_MIN |
3 | Min enemy ground units to fire the statics/mines threat gate | Common/Init/Init_CommonConstants.sqf:1900 |
WFBE_C_WDDM_COMP_CAP |
3 | Max distinct WDDM compositions per base area | Common/Init/Init_CommonConstants.sqf:1902 |
WFBE_C_BASE_AREA_RANGE |
250 | Base-area radius (meters) for detection, threat, and counting | Common/Init/Init_CommonConstants.sqf:1411 |
WFBE_C_BASE_DEFENSE_MANNING_RANGE |
250 | Manning range passed to ConstructDefense
|
Common/Init/Init_CommonConstants.sqf:1396 |
- Defense-Structures-Catalog — the defense classnames, prices, and content this gate categorizes
- Construction-And-CoIn-Systems-Atlas — where RequestDefense sits in the build-request flow
- Server-Composition-Spawner-Function-Reference — Server_ConstructPosition and WDDM composition spawning
- PVF-Dispatch-Implementation-Playbook — how PVF handlers like RequestDefense are wired and dispatched
- Bank-Reserve-And-Artillery-Radar-Structures — the base-center detection pattern RequestDefense mirrors
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