Development
Development
This chapter covers build, release, and the project conventions. Testing has its own chapter.
Build
Check the project with pedantic mode:
hemtt check -p -ePedantic mode treats warnings as errors. Build the PBOs with:
hemtt buildMake a release with:
hemtt releaseRelease signs the PBOs with a per-release key and makes the bikey and zip files. No private key is required or stored.
Continuous integration
GitHub Actions runs these checks on every push:
hemtt check -p -ehemtt build- The Python validators and physics tests
- An SBOM on release tags
- Release-drafter
The Docker test runs on demand.
Conventions
Naming
Functions use the name aee_<component>_fnc_<name>. PBOs use the name aee_<component>. Shared state uses aee_core_* mission variables.
Each function file is functions/fnc_<name>.sqf. The files are registered in XEH_PREP.hpp and compiled through CBA XEH. This is the standard ACE3/CBA pattern.
Localisation uses a per-addon stringtable.xml. Keys use the form STR_AEE_<Component>_<Key>.
Settings
AEE registers its settings at mission start with CBA_fnc_addSetting. The settings live in addons/core/initSettings.inc.sqf. All settings appear under the category “AEE Core” in the CBA settings UI. There are 26 settings.
EDEN module
The EDEN module, AEE Environment Config, is placed by mission editors. The module is global. It exposes these fields:
biomeOverridetempOffsetprecipBiaswindMultiplierupdateInterval
Contributing
The project uses trunk-based development. All commits must be signed. A pre-commit hook runs hemtt check -p -e, ste-lint, and audit.
See CONTRIBUTING.md for the full guide.
Verify techniques against workshop source, not only the wiki
The BIS wiki is incomplete for some scripting topics. It marks the DepthOfField post-process effect as “TBD” with no parameter table, and states camSetFocus works only on camCreate cameras. Both are true of the wiki, but the first is misleading: production workshop mods use DepthOfField in the player view with ppEffectForceInNVG true.
The lesson: before declaring a rendering or scripting feature impossible, search the Steam Workshop for a mod that does it and read its source. Real implementations beat a wiki placeholder every time. TFN NVG Effects (workshop 3682613859) proved the NVG depth-of-field technique that this project now uses. KtweaK’s NVG (workshop 3711042620) shows a distance-based dynamicBlur alternative.
Technique sources referenced in this project:
| Feature | Workshop reference | Technique |
|---|---|---|
| NVG depth of field | TFN NVG Effects (3682613859) | DepthOfField ppEffect, ppEffectForceInNVG true, ppEffectAdjust [blur, dist, 1] |
| Distance-aware blur | KtweaK’s NVG (3711042620) | dynamicBlur scaled by range factor |
| Thermal/CC params | A3TI (2041057379) | DEFAULT_TIPP_SETTINGS brightness/contrast |