-
Notifications
You must be signed in to change notification settings - Fork 0
LoadoutManager Data Model Contributor Guide
Source-verified 2026-06-21 against then-current master cf2a6d6a4; current origin/master is 0139a346, so recheck cited paths before current-head claims. Paths under
Tools/LoadoutManager/are relative to the repo root. Paths underMissions/[55-2hc]warfarev2_073v48co.chernarus/are relative to the Chernarus mission dir. Arma 2 OA 1.64.
The LoadoutManager is a C# console application (Tools/LoadoutManager/) that reads vehicle and terrain data-model classes and generates four SQF files per terrain:
| Generated file | Purpose |
|---|---|
Client/Module/EASA/EASA_Init.sqf |
Vehicle list + all pylon-combination loadouts with prices |
Common/Functions/Common_BalanceInit.sqf |
Per-vehicle switch block that adds/removes magazines and weapons from spawned vehicles |
Common/Common_ReturnAircraftNameFromItsType.sqf |
Radar-name overrides for aircraft with hasCustomRadarName = true
|
Common/Functions/Common_ModifyAirVehicle.sqf |
Per-aircraft damage-model HandleDamage injection (AA-missile one-hit-kill logic) |
You must re-run the tool after every data-model change. The SQF files checked into the repo are the generator's output — editing them by hand will be overwritten on the next run.
BaseVehicle (Tools/LoadoutManager/Data/Vehicles/BaseVehicle.cs)
├── BaseAircraft (Data/Vehicles/Aircrafts/BaseAircraft.cs)
│ └── BaseHelicopter (Data/Vehicles/Aircrafts/BaseHelicopter.cs)
│ └── e.g. AH64DEP1, MI24P, KA52 …
│ └── e.g. F35B, SU34, MIG21 (modded) …
└── BaseGroundVehicle (Data/Vehicles/GroundVehicles/BaseGroundVehicle.cs)
└── e.g. M2A2EP1, PANDUR …
All concrete vehicle classes live under Data/Vehicles/Aircrafts/Implementations/ or Data/Vehicles/GroundVehicles/Implementations/, organized by faction subfolder (BLUFOR/, OPFOR/).
| Field | Type | Required | Description | Source |
|---|---|---|---|---|
vehicleType |
VehicleType |
Yes | Enum entry whose [EnumMember] value is the exact Arma class name |
BaseVehicle.cs:25 |
inGameDisplayName |
string |
Yes | Display string shown in EASA screen and radar readout | BaseVehicle.cs:52 |
inGameFactoryLevel |
int |
Yes | Factory level gate (1–5) | BaseVehicle.cs:46 |
producedFromFactoryType |
FactoryType |
Yes |
LIGHTFACTORY, HEAVYFACTORY, or AIRCRAFTFACTORY
|
BaseVehicle.cs:49 |
factionType |
FactionType |
Modded only | Only MOLATIAN ("Molatian Air Force") currently defined; vanilla vehicles omit this |
Data/Factions/FactionType.cs:6 |
moddedVehicle |
bool |
Modded only |
true routes output to aircraftEasaLoadoutsFileForModdedMaps / commonBalanceInitFileForModdedMaps
|
BaseVehicle.cs:53 |
inGamePrice |
int |
Modded only | Only written to Core_MOD.sqf for modded vehicles |
BaseVehicle.cs:43 |
ConstructionTime |
int |
Modded only | Seconds to build; only written to Core_MOD.sqf
|
BaseVehicle.cs:57 |
vanillaGameDefaultLoadout |
Loadout |
Yes (can be empty) | Arma's built-in loadout before the mission modifies it | BaseVehicle.cs:34 |
defaultLoadout |
Loadout |
Yes (can be empty) | The WASP target loadout the mission applies at spawn | BaseVehicle.cs:28 |
UnknownValue1 defaults to -2, UnknownValue2 to 3, UnknownValue3 to 3 — do not change without understanding the Core_MOD consumer (BaseVehicle.cs:58-60).
Every new vehicle needs a new enum entry in Data/Vehicles/VehicleType.cs. The [EnumMember(Value = "...")] attribute must match the exact Arma 2 CfgVehicles class name.
// Tools/LoadoutManager/Data/Vehicles/VehicleType.cs:5-6
[EnumMember(Value = "Su34")]
SU34,Modded vehicles go at the bottom of the enum, after the comment // Modded vehicles (VehicleType.cs:114).
Aircraft classes inherit BaseAircraft (fixed-wing) or BaseHelicopter (rotary). Both live under Implementations/BLUFOR/ or Implementations/OPFOR/.
| Field | Type | Required | Description | Source |
|---|---|---|---|---|
pylonAmount |
int |
Yes | Total number of pylons. Combinations are generated over pylonAmount / 2 slots |
BaseAircraft.cs:11,64 |
allowedAmmunitionTypesWithTheirLimitationAmount |
Dictionary<AmmunitionType, int> |
Yes | Keys = ammo types available on the EASA screen. Value 0 = unlimited; positive value = cap per combination |
BaseAircraft.cs:14 |
addToDefaultLoadoutPrice |
bool |
No | When true, loadout price is the delta from defaultLoadout rather than the absolute cost of all pylons |
BaseAircraft.cs:16 |
hasCustomRadarName |
bool |
No | When true, the vehicle is added to Common_ReturnAircraftNameFromItsType.sqf
|
BaseAircraft.cs:22 |
excludeFromAntiAirMissileOneHitKill |
bool |
No | When true, the vehicle is skipped in the AA damage-model injection into Common_ModifyAirVehicle.sqf
|
BaseAircraft.cs:24 |
ammunitionTypeCostFloatModifier |
Dictionary<AmmunitionType, float> |
No | Per-ammo-type multiplier applied on top of costPerPylon
|
BaseAircraft.cs:19 |
CalculateWeaponsCount enforces that the total weapon-slots used equals pylonAmount before a combination is emitted (BaseAircraft.cs:300). Several ammo types receive special slot-counting treatment:
| AmmunitionType enum | Slot weight | Note |
|---|---|---|
TWELVEROUNDSVIKHR |
× 2 |
Each magazine counts as two slots |
FOURROUNDCH29 |
× 2 |
|
EIGHTROUNDHELLFIRE |
× 2 |
|
FOURROUNDFAB250 |
÷ 2 |
Counts as half a slot |
TWOROUNDFAB250 |
÷ 2 |
Case fall-through at 459-460, multiplier applied at 461 |
SIXROUNDCH29 |
× 3 |
Each magazine counts as three slots |
| All others |
× 1 (default) |
When addToDefaultLoadoutPrice = true the slot check is skipped (BaseAircraft.cs:300).
The generator builds every combination with repetition of the allowed ammo types taken pylonAmount / 2 at a time (BaseAircraft.cs:64). Each selected ammo type fills 2 pylons (i.e., magazines are added in pairs: p % 2 != 0 iterations are skipped, BaseAircraft.cs:331-334).
Hellfires and Vikhr each consume 2 combination slots instead of 1 (BaseAircraft.cs:501-510).
BASECH29 is blocked from appearing alone (2-magazine-only combinations are rejected, BaseAircraft.cs:258-261) and is replaced at output time with variant-specific magazine entries from optionalAmmunitionDictionary (BaseAircraft.cs:376-386).
SIXTYROUNDCMFLAREMAGAZINE is stripped from default-loadout rows (not from priced rows), so flares never appear in the EASA cost calculation (BaseAircraft.cs:191-198).
For each priced combination row (_generateWithPriceAndWeaponsInfo = true):
row_price = Σ (costPerPylon × 2 × costFloatModifier) per ammo-type pair
+ Σ costPerWeaponLauncher per ammo-type entry (before duplicate-launcher guard)
-
costPerPylonis defined on eachBaseAmmunitionimplementation (e.g. R-73 = 700,Data/Ammunition/Implementations/AirToAirWeapons/R-73/TwoRoundR73.cs; GBU-12 = 4000,Data/Ammunition/Implementations/AirToGroundWeapons/Bombs/LaserGuidedBombs/GBU12/TWOROUNDGBU12.cs). -
costPerWeaponLauncheris defined on eachBaseWeaponimplementation (e.g. R-73 launcher = 1000,Data/Weapons/Implementations/AirToAirWeapons/R-73/R73_WEAPON.cs). Added once per ammo-type entry in the sorted input, before the duplicate-launcher guard at line 394 — meaning if twoAmmunitionTypeentries share the sameWeaponTypelauncher, the launcher cost is charged for each. Check whether this is intentional before relying on this for price calculations (BaseAircraft.cs:390). -
costFloatModifiercomes fromammunitionTypeCostFloatModifieron the vehicle class. If the key is absent, the modifier defaults to 1 (no change,BaseAircraft.cs:174-181).
When addToDefaultLoadoutPrice = true the per-pylon cost is the delta from defaultLoadout: costPerPylon × (easaAmmoCount − defaultLoadoutAmmoCount) (BaseAircraft.cs:372). This is used for AH-64D (EP1) and Mi-24P (Data/Vehicles/Aircrafts/Implementations/BLUFOR/AH64DEP1.cs:29; OPFOR/MI24P.cs:63).
MI24P has special handling in GenerateDefaultLoadout: it uses defaultLoadout.AmmunitionTypesWithCount rather than the turret path, even though a defaultLoadoutOnTurret is also populated (BaseAircraft.cs:145-149). The turret loadout affects only Common_BalanceInit.sqf, not EASA_Init.sqf.
WILDCAT (VehicleType.WILDCAT, class AW159_Lynx_BAF) bypasses the slot-count check entirely and has three fixed weapons injected into every priced loadout row before price calculation:
| AmmunitionType | Count injected |
|---|---|
TWOHUNDREDROUNDCTWSHE |
2 |
TWOHUNDREDROUNDCTWSSABOT |
2 |
SIXROUNDCRV7HEPD |
2 |
Source: BaseAircraft.cs:275-296.
BaseHelicopter sets default ammunitionTypeCostFloatModifier entries in its constructor so helicopters are cheaper or more expensive for certain munition types relative to their base costPerPylon:
| AmmunitionType | Modifier | Net effect |
|---|---|---|
EIGHTROUNDHELLFIRE |
0.8333… | ~17% cheaper |
FOURROUNDATAKA |
0.8333… | ~17% cheaper |
TWOROUNDSIDEWINDER |
5.714… | ~5.7× more expensive |
TWOROUNDR73 |
5.714… | ~5.7× more expensive |
TWOROUNDSTINGER |
12.5 | 12.5× more expensive |
TWOROUNDIGLA |
12.5 | 12.5× more expensive |
SIXROUNDFAB250 |
1.5 | 1.5× more expensive |
Source: Tools/LoadoutManager/Data/Vehicles/Aircrafts/BaseHelicopter.cs:7-16.
Helicopter subclasses can override individual entries by re-assigning values after calling the base constructor.
Ground vehicles inherit BaseGroundVehicle (Data/Vehicles/GroundVehicles/BaseGroundVehicle.cs). They only contribute to Common_BalanceInit.sqf; they have no EASA pylon entries.
The key additional fields (from BaseVehicle) used by ground vehicles:
| Field | Type | Description | Source |
|---|---|---|---|
defaultLoadout |
Loadout |
Main-seat load (driver/commander seat) | BaseVehicle.cs:28 |
vanillaGameDefaultLoadout |
Loadout |
Main-seat vanilla load | BaseVehicle.cs:34 |
defaultLoadoutOnTurret |
Loadout |
Turret-seat load | BaseVehicle.cs:31 |
vanillaGameDefaultLoadoutOnTurret |
Loadout |
Turret-seat vanilla load | BaseVehicle.cs:37 |
turretPos |
int |
Arma turret index (0 = first external turret, -1 = pilot/co-pilot position) | BaseVehicle.cs:40 |
weaponsToRemoveUntilFactoryLevelOnAVehicle |
Dictionary<WeaponType, int> |
Remove the weapon from main-body if factory level < value | BaseVehicle.cs:63 |
weaponsOnTheTurretToRemoveUntilFactoryLevelOnAVehicle |
Dictionary<WeaponType, int> |
Remove the weapon from turret if factory level < value | BaseVehicle.cs:66 |
When a vehicle sets weaponsToRemoveUntilFactoryLevelOnAVehicle, the generator emits a SQF guard block in Common_BalanceInit.sqf (BaseVehicle.cs:137-157 non-turret / BaseVehicle.cs:162-182 turret; lines 118-129 are the invocation site that calls these methods):
// Generated output example (PANDUR, Spike on turret, requires factory level 4):
_currentFactoryLevel = ((side group player) Call WFBE_CO_FNC_GetSideUpgrades) select WFBE_UP_LIGHT;
if (_currentFactoryLevel < 4) then {
_this removeWeaponTurret ["SpikeLauncher_ACR", [0]];
};The factory variable used is:
-
WFBE_UP_HEAVYwhenproducedFromFactoryType == HEAVYFACTORY -
WFBE_UP_LIGHTwhenproducedFromFactoryType == LIGHTFACTORY
Source: BaseVehicle.cs:142-145, BaseVehicle.cs:168-171.
Only the first entry in the dictionary is processed (the code calls .First().Value). If a vehicle needs multiple weapons removed at different levels, the current generator only handles one (BaseVehicle.cs:151-153).
// Tools/LoadoutManager/Data/Vehicles/GroundVehicles/Implementations/BLUFOR/HeavyFactory/M2A2EP1.cs
VehicleType = VehicleType.M2A2EP1; // → "M2A2_EP1"
producedFromFactoryType = FactoryType.HEAVYFACTORY;
inGameFactoryLevel = 1;
inGameDisplayName = "M2A2 Bradley";
// Vanilla has TOW-2 and M242 BC variants; WASP default strips TOW and replaces M242 BC → M242// Tools/LoadoutManager/Data/Vehicles/GroundVehicles/Implementations/BLUFOR/LightFactory/PANDUR.cs
VehicleType = VehicleType.PANDUR; // → "Pandur2_ACR"
producedFromFactoryType = FactoryType.LIGHTFACTORY;
inGameFactoryLevel = 3;
turretPos = 0;
// Turret load: ATK44 (vanilla) → M242 APDS/HEI (WASP)
// SpikeLauncher_ACR removed from turret if WFBE_UP_LIGHT < 4Data/Ammunition/AmmunitionType.cs maps C# enum names to Arma magazine class names via [EnumMember]. Important conventions:
- Vanilla (unmodified Arma) entries are prefixed
VANILLA_. -
BASECH29is flaggedERROR_UNDEFINED_VARIANTS(plural) in itsAmmunitionTypeslist — the generator skips entries with that literal string atBaseAircraft.cs:351-353and instead usesoptionalAmmunitionDictionaryfor output (BaseAircraft.cs:376-386). Do not rely onBASECH29as the sole entry in a combination - 2-magazine-only combinations are rejected (BaseAircraft.cs:258-261). UseBASECH29as a key with value0(unlimited) alongside other ammo types; the generator will substitute variants fromoptionalAmmunitionDictionaryat output time. -
SIXROUNDFAB250carries the[EnumMember]valueERROR_UNDEFINED_VARIANT(singular, no S) on theAmmunitionTypeenum entry as a marker that it is a meta-combination. Its concreteBaseAmmunitionclass lists{FOURROUNDFAB250, TWOROUNDFAB250}and is not skipped by the generator — theERROR_UNDEFINED_VARIANTScheck at line 351 does not match the singular form.SIXROUNDFAB250can appear inallowedAmmunitionTypesWithTheirLimitationAmount. -
WARNING_GAME_CRASH_DO_NOT_USE_IN_LOADOUTS_TWELVEROUNDCRV7PG(12Rnd_CRV7) is explicitly flagged in bothAmmunitionType.cs(line 142) andWeaponType.cs(line 122) — never includeCRV7_PGin any loadout. - Modded entries at the bottom of the file (
AmmunitionType.cs:173-178) are for the MiG-21 map mod.
Each enum entry is backed by a concrete BaseAmmunition subclass under Data/Ammunition/Implementations/. That class sets costPerPylon, amountPerPylon, ammoDisplayName, weaponDefinition, and AmmunitionTypes (the list of actual Arma magazine classes).
Data/Weapons/WeaponType.cs maps C# names to Arma weapon class names. Each entry is backed by a BaseWeapon subclass setting costPerWeaponLauncher. This cost is added once per ammo-type entry in the sorted input at BaseAircraft.cs:390, before the duplicate-launcher guard at line 394. If two AmmunitionType entries share the same WeaponType launcher, the launcher cost is charged for each entry.
doNotAddWeapon (on BaseWeapon) suppresses the weapon from the generated weapons-array while still charging its cost — used for internal-gun weapons that are always present on the vehicle.
-
Add a
VehicleTypeentry inData/Vehicles/VehicleType.cswith the exact Arma class name as the[EnumMember]value. -
Create the implementation file under
Data/Vehicles/Aircrafts/Implementations/BLUFOR/orOPFOR/(orOPFOR/_Modded/for modded vehicles). -
Choose the base class: extend
BaseHelicopterfor rotary aircraft,BaseAircraftfor fixed-wing. -
Set mandatory fields in the constructor:
Field Constraint VehicleTypeMust match new enum entry pylonAmountMust be even; combinations use pylonAmount / 2slotsinGameDisplayNameFree string; shown in EASA and radar name inGameFactoryLevel1–5 producedFromFactoryTypeFactoryType.AIRCRAFTFACTORYfor all aircraftvanillaGameDefaultLoadout.AmmunitionTypesWithCountArma's built-in magazines (use VANILLA_*entries)defaultLoadout.AmmunitionTypesWithCountWASP's intended spawn loadout allowedAmmunitionTypesWithTheirLimitationAmountAt least one entry; 0= unlimited -
Verify pylon arithmetic: sum of all slots in
allowedAmmunitionTypesWithTheirLimitationAmount(accounting for the special-weight types above) must be able to fillpylonAmountexactly, or setaddToDefaultLoadoutPrice = trueto skip the check. -
Add
AmmunitionTypeentries if the aircraft uses magazines not already in the enum — and create the correspondingBaseAmmunitionsubclass. -
Set
moddedVehicle = trueand populateinGamePrice,ConstructionTime,factionTypeif the vehicle requires a modded map'sCore_MOD.sqf. -
Re-run the LoadoutManager to regenerate all four SQF files per terrain.
-
Add a
TerrainNameentry inData/Terrains/TerrainName.cs([EnumMember]value = display name used inGUI_Menu_Help.sqfheader). -
Create the implementation file under
Data/Terrains/Implementations/:-
MainMap/— for the Chernarus master (TerrainModStatus.MAIN) -
VanillaMaps/— for Takistan and other maps copied from Chernarus (TerrainModStatus.VANILLA) -
ModdedMaps/— for third-party maps requiringCore_MOD.sqf(TerrainModStatus.MODDED)
-
-
Set mandatory fields:
Field Options Meaning TerrainNameTerrainName.*Must match new enum entry TerrainTypeFOREST/DESERTControls player count (55 vs 61) and Chernarus-dependent defines terrainModStatusMAIN/VANILLA/MODDEDControls file-copy path and Core_MOD.sqfgenerationinGameMapNamestring Arma map class name (lowercase); used to construct the mission directory path startingDistanceInMetersint Injected into version.sqfasSTARTING_DISTANCEisNavalTerrainbool Controls #define IS_NAVAL_MAPinversion.sqf -
Wire it into
SqfFileGenerator(SqfFileGenerators/SqfFileGenerator.cs:128-133): vanilla/main terrains require an explicitWriteAndUpdateToFilesForATerraincall. Modded terrains are iterated automatically viaTerrainNameenum (the modded path is currently commented out pending re-enablement,SqfFileGenerator.cs:132).
| Class | TerrainModStatus |
TerrainType |
inGameMapName |
isNavalTerrain |
Source |
|---|---|---|---|---|---|
CHERNARUS |
MAIN |
FOREST |
chernarus |
true |
Implementations/MainMap/CHERNARUS.cs:3-10 |
TAKISTAN |
VANILLA |
DESERT |
takistan |
false |
Implementations/VanillaMaps/TAKISTAN.cs:3-10 |
TAVI |
MODDED |
FOREST |
tavi |
true |
Implementations/ModdedMaps/TAVI.cs:3-10 |
VANILLA terrains copy files from the Chernarus source directory and then patch Init_Server.sqf to replace [\"SET_MAP\", 1] with [\"SET_MAP\", 2] for Takistan (BaseTerrain.cs:304-337).
The generator calls BaseTerrain.WriteAndUpdateTerrainFiles() (BaseTerrain.cs:31) which writes:
| Target file (relative to mission dir) | Source variable | Insert method |
|---|---|---|
Client/Module/EASA/EASA_Init.sqf |
_easaFileString |
Full overwrite |
Common/Functions/Common_BalanceInit.sqf |
_commonBalanceFileString |
Full overwrite |
Common/Common_ReturnAircraftNameFromItsType.sqf |
_aircraftDisplayNameStrings |
Full overwrite |
version.sqf |
generated internally | Full overwrite |
Common/Functions/Common_ModifyAirVehicle.sqf |
_addedAircraftDamageModelChanges |
Insertion between markers //LoadoutManagerInsertChanges and //LoadoutManagerInsertChanges_END
|
Common/Config/Core/Core_MOD.sqf |
_coreModFile |
Full overwrite (modded terrains only) |
The Common_BalanceInit.sqf header is hardcoded by the generator and includes the if (isServer) exitWith {}; guard to prevent an occasional server freeze when processing certain vehicles (e.g., Pandur, BTR-90) - see SqfFileGenerator.cs:241-244 (SqfFileGenerator.cs:241-244).
| Mistake | Consequence | Fix |
|---|---|---|
| Vehicle file placed in wrong faction folder | No runtime error, but file is not discovered by EnumExtensions.GetInstance if the naming convention is broken |
Name the class exactly as the VehicleType enum member (case-sensitive) |
pylonAmount odd number |
pylonAmount / 2 truncates; combinations silently under-fill |
Always use an even value |
Ammo type with ERROR_UNDEFINED_VARIANTS as [EnumMember] used in allowedAmmunitionTypesWithTheirLimitationAmount
|
Generator skips and emits empty loadout row | Use the concrete variant (FOURROUNDCH29, SIXROUNDCH29) or the BASECH29 placeholder key as documented |
TerrainName enum added but WriteAndUpdateToFilesForATerrain call not added |
New terrain never written | Add explicit call for VANILLA/MAIN; modded path currently disabled |
| Editing generated SQF files directly | Overwritten on next tool run | Always edit the C# data model and regenerate |
Using CRV7_PG / TWELVEROUNDCRV7PG
|
Game crash | Enum is prefixed WARNING_GAME_CRASH_DO_NOT_USE_IN_LOADOUTS for exactly this reason (AmmunitionType.cs:142, WeaponType.cs:122) |
weaponsToRemoveUntilFactoryLevelOnAVehicle with multiple entries |
Only .First() is processed |
Current generator limitation — use a single entry per vehicle |
- Gear-Loadout-And-EASA-Atlas — EASA_Init.sqf runtime behaviour, EASA_Equip call shape, and how loadout rows are consumed in-game.
-
Factory-And-Purchase-Systems-Atlas — Factory levels,
WFBE_UP_HEAVY/WFBE_UP_LIGHTupgrade counters, and howproducedFromFactoryTypemaps to purchase gates. -
Assets-Config-Localization-And-Parameters-Atlas — CfgVehicles class names, faction configs, and how
VehicleType[EnumMember]values must match the config. -
Variable-And-Naming-Conventions —
WFBE_C_*/WFBE_UP_*constant naming patterns referenced in the generated weapon-removal guards. - Faction-Unit-And-Vehicle-Roster-Catalog — Complete roster of vehicles by faction and factory tier, cross-referenced against the data-model classes documented here.
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 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