3.9 KiB
3.9 KiB
ArmADump
Arma 3 config export and rebalance tool. Exports ammo/armor/weapons/magazines to CSV, then generates a CfgPatches mod to normalize non-RHS values to RHS baseline.
What this repo is
Extraction scripts (run in Arma 3)
ammo.sqf— CfgAmmo export with vanilla + ACE3 ballistics properties. Uses BFS withsleep 0batching.armor.sqf— Vest + HeadGear export with per-body-part armor/passthrough values.weapons.sqf— Weapon export with ACE barrel properties (ACE_barrelLength,ACE_barrelTwist).magazines.sqf— Magazine export linking to ammo classes withinitSpeed.
Processing pipeline (Python)
scripts/extract_csvs.py— Parses Arma.rptlog, extracts CSVs between--- START/END ---markers.scripts/split_by_mod.py— Splits raw CSVs into per-mod folders underdata/.scripts/generate_patches.py— Compares all mods to RHS baseline, generates per-modoutput/<mod>/config.cpp+debug/<mod>/before/after CSVs.scripts/package_mod.py— Packages output into@modfolder with PBOs via armake2. Reads settings frompackage_mod.ini.
Reference
REFERENCE.md— Quick reference for all config values (vanilla + ACE3).
Pipeline (exact commands)
Step 1: Run extraction scripts in Arma 3
Run each script in debug console (or execVM). Each outputs CSV via diag_log to .rpt:
execVM "ammo.sqf"
execVM "armor.sqf"
execVM "weapons.sqf"
execVM "magazines.sqf"
Step 2: Extract CSVs from .rpt
python scripts/extract_csvs.py "path/to/arma3.rpt"
Produces ammo_raw.csv, armor_raw.csv, weapons_raw.csv, magazines_raw.csv in repo root.
Step 3: Split by mod
python scripts/split_by_mod.py
Creates data/[mod_name]/ folders with per-mod CSVs. Baseline folders are prefixed _ (_rhs, _vanilla, _ace).
Step 4: Generate rebalance mod
python scripts/generate_patches.py
Produces:
output/<mod>/config.cpp— Per-mod CfgPatches config with overridesoutput/unmatched.csv— Items with no RHS equivalentdebug/<mod>/ammo.csv— Before/after debug tables for ammo overridesdebug/<mod>/armor.csv— Before/after debug tables for armor overrides
Step 5: Package and install mod
python scripts/package_mod.py
Reads package_mod.ini for mod name, author, version, output path. Produces @<mod_name>/addons/<mod>_<folder>.pbo in your Arma mods directory.
Key gotchas
- SQF scripts output to
.rptlog, not directly to a file. Must extract from log. - CSV delimiter is
;(semicolon), no quoting. ammo.sqfusessleep— requires scheduled environment (execVMorspawn).- CfgAmmo BFS depth limit of 8 levels prevents exponential blowup.
configSourceAddonListreturns CfgPatches class names (e.g.rhs_c_troops), not display names. These are used as folder names indata/.caliberis a penetration coefficient, not actual bullet caliber. Classification uses class name patterns, not caliber value ranges.- RHS baseline: folders prefixed
_are baseline. Matching uses(caliber_tier, subtype)for ammo,(item_type, tier)for armor. - Arma config uses
{}for arrays, not[]. The generator handles this conversion. requiredAddons[]must use original CfgPatches class names, not sanitized folder names.unknownsource_mod entries are skipped.- PBO names use mod name from
package_mod.ini(e.g.a3rebalancer_jca.pbo). - Debug CSVs go to
debug/, notoutput/— they must not be packed into PBOs. - armake2 must be installed (
cargo install armake2) and available in PATH ortools/. - Arma locks PBO files when running. Close Arma before repacking.
Conventions
- SQF files use 8-space indentation (tabs).
- CSVs use
;delimiter. - Python scripts use UTF-8 encoding.
- Per-mod folders use the CfgPatches class name as folder name.
continuekeyword avoided in SQF for pre-2.14 Arma compatibility.