forge/arma/forge_pmc_simulator.Tanoa/CfgEnemyFactions.hpp
Jacob Schmidt 8582e6c5e5 Discover enemy factions dynamically from loaded mods
- Scan CfgFactionClasses/CfgVehicles at runtime for selectable enemy factions
- Add CfgFactionUnitMap overrides and keep legacy params as fallback
2026-05-23 01:23:14 -05:00

59 lines
2.4 KiB
C++

/*
* Runtime enemy faction discovery controls for the PMC simulator setup flow.
*
* Consumers:
* - forge_pmc_fnc_getEnemyFactionOptions scans loaded CfgFactionClasses and
* CfgVehicles at runtime, then uses this config to filter and polish the UI.
* - forge_pmc_fnc_resolveEnemyFactionParam uses override values here to keep
* legacy mission params compatible when the setup UI is cancelled.
* - Mission generators use ENEMY_FACTION_STR and ENEMY_SIDE after setup has
* applied the selected option.
*
* This config is intentionally not the full faction list. Any loaded mod
* faction on an allowed side can appear automatically if it has spawnable
* infantry or a CfgFactionUnitMap override.
*/
class CfgEnemyFactions {
/*
* Arma side IDs allowed as generated enemy factions:
* - 0: EAST / OPFOR
* - 2: RESISTANCE / Independent
*
* WEST / BLUFOR is intentionally excluded because generated missions use
* these options as opposing forces.
*/
sides[] = {0, 2};
/*
* Factions that should never be offered even if present in the active
* modset. Keep this for factions that are unsuitable for PMC contracts.
*/
denylist[] = {
"IND_UN_lxWS"
};
/*
* Optional display/order/value metadata for known factions.
*
* - value keeps legacy Params::enemyFaction values stable.
* - order controls setup UI ordering before dynamically discovered factions.
* - display overrides raw CfgFactionClasses names when we want cleaner text.
*
* Factions not listed here are still discovered automatically and sorted
* after these known options.
*/
class Overrides {
class OPF_F { value = 0; order = 0; display = "CSAT"; };
class OPF_T_F { value = 1; order = 1; display = "CSAT (Pacific)"; };
class OPF_R_F { value = 2; order = 2; display = "Spetnaz"; };
class OPF_SFIA_lxWS { value = 3; order = 3; display = "SFIA"; };
class OPF_TURA_lxWS { value = 4; order = 4; display = "Tura"; };
class IND_F { value = 5; order = 5; display = "AAF"; };
class IND_G_F { value = 6; order = 6; display = "FIA"; };
class IND_E_F { value = 7; order = 7; display = "LDF"; };
class IND_C_F { value = 8; order = 8; display = "Syndikat"; };
class IND_L_F { value = 9; order = 9; display = "Looters"; };
class IND_TURA_lxWS { value = 10; order = 10; display = "Tura"; };
};
};