From f43c198ea4e94c5cad6458b93edb82ad0e6a89b4 Mon Sep 17 00:00:00 2001 From: Boundir <30468080+boundir@users.noreply.github.com> Date: Tue, 22 Sep 2026 16:58:13 +0200 Subject: [PATCH 1/4] Track the doc generator and fix the schema it produces Fixes replace-only arrays advertised a mode field that does not exist Fixes template fields carried neither type nor description. --- .scripts/generate-docs.ps1 | 1349 + .../Classes/AE_DataStructures.uc | 3 + CHANGELOG.md | 142 + README.md | 45 +- docs/schema.json | 63251 ++++++++++++++++ 5 files changed, 64785 insertions(+), 5 deletions(-) create mode 100644 .scripts/generate-docs.ps1 create mode 100644 CHANGELOG.md create mode 100644 docs/schema.json diff --git a/.scripts/generate-docs.ps1 b/.scripts/generate-docs.ps1 new file mode 100644 index 0000000..e5b2749 --- /dev/null +++ b/.scripts/generate-docs.ps1 @@ -0,0 +1,1349 @@ +#Requires -Version 5.1 +<# +.SYNOPSIS + Regenerates the AbilityEditor 2.0 API documentation from the UnrealScript sources. + +.DESCRIPTION + Parses AbilityEditor\Src\AbilityEditor\Classes\*.uc and writes: + - docs/schema.json machine-readable API description + - README.md generated blocks between markers + +.PARAMETER SchemaOnly + Write docs/schema.json only and leave README.md untouched. + +.PARAMETER CheckOnly + Write nothing and exit 1 when README.md or docs/schema.json are stale. + +.PARAMETER PrintSourceHash + Print the hash of the .uc sources and exit. + +.PARAMETER SdkPath + XCOM 2 SDK root, defaulting to the 'xcom.highlander.sdkroot' VS Code setting. + Without it the abstract / non-editable / dispatch-order enrichment is skipped. + +.EXAMPLE + .\.scripts\generate-docs.ps1 -CheckOnly +#> +[CmdletBinding()] +param( + [switch] $SchemaOnly, + [switch] $CheckOnly, + [switch] $PrintSourceHash, + [string] $SdkPath = '' +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = 'Stop' + +# Status messages go to the information stream; -InformationAction still wins when passed. +if (-not $PSBoundParameters.ContainsKey('InformationAction')) { $InformationPreference = 'Continue' } + +$RepoRoot = Split-Path -Parent $PSScriptRoot +$ClassesDir = Join-Path $RepoRoot 'AbilityEditor\Src\AbilityEditor\Classes' +$ReadmePath = Join-Path $RepoRoot 'README.md' +$DocsDir = Join-Path $RepoRoot 'docs' +$SchemaPath = Join-Path $DocsDir 'schema.json' + +$DataStructuresFile = Join-Path $ClassesDir 'AE_DataStructures.uc' +$DlcInfoFile = Join-Path $ClassesDir 'X2DLCInfo_AbilityEditor.uc' + +# Line separator used throughout the markdown rendering. +$nl = "`n" + +#region Generic helpers + +function Get-SourceHash { + param([string] $Path) + + $files = @(Get-ChildItem -LiteralPath $Path -Filter '*.uc' -File | Sort-Object Name) + $text = ($files | ForEach-Object { [System.IO.File]::ReadAllText($_.FullName) }) -join "`n" + + $sha256 = [System.Security.Cryptography.SHA256]::Create() + try { + $hash = $sha256.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($text)) + } + finally { + $sha256.Dispose() + } + return [System.BitConverter]::ToString($hash).Replace('-', '').ToLowerInvariant() +} + +function Read-TextFile { + param([string] $Path) + + return [System.IO.File]::ReadAllLines($Path) +} + +function ConvertTo-CommentFreeText { + param([string] $Text) + + return (($Text -split "`n" | ForEach-Object { $_ -replace '//.*$', '' }) -join "`n") +} + +# Splits a .uc file into function name -> body lines. +function Get-FunctionBlockMap { + param([string[]] $Lines) + + $blocks = @{} + $current = $null + $buffer = [System.Collections.Generic.List[string]]::new() + + foreach ($line in $Lines) { + if ($line -match '^\s*(?:static\s+)?(?:event|function)\s+(?:[\w<>]+\s+)?(\w+)\s*\(') { + if ($null -ne $current) { $blocks[$current] = $buffer.ToArray() } + $current = $Matches[1] + $buffer = [System.Collections.Generic.List[string]]::new() + } + if ($null -ne $current) { $buffer.Add($line) } + } + if ($null -ne $current) { $blocks[$current] = $buffer.ToArray() } + + return $blocks +} + +# Maps variable names to edit-struct types, from parameters and local declarations. +function Get-VarTypeMap { + param( + [string] $Text, + [string[]] $StructNames + ) + + $map = @{} + $joined = $StructNames -join '|' + + $paramPattern = '[\s\(,](' + $joined + ')\s+(\w+)\s*[,\);]' + foreach ($m in [regex]::Matches($Text, $paramPattern)) { + $map[$m.Groups[2].Value] = $m.Groups[1].Value + } + + $localPattern = '(?m)^\s*(?:local\s+)?(' + $joined + ')\s+(\w+)\s*[,\);]?\s*$' + foreach ($m in [regex]::Matches($Text, $localPattern)) { + $map[$m.Groups[2].Value] = $m.Groups[1].Value + } + + return $map +} + +# 'Template.AbilityCosts[i].Field' -> 'AbilityCosts[].Field' +function Get-GameFieldFromTarget { + param([string] $Target) + + $normalized = $Target -replace '\[\w+\]', '[]' + $dot = $normalized.IndexOf('.') + if ($dot -ge 0) { return $normalized.Substring($dot + 1) } + return $normalized +} + +# Extracts what a function body actually writes: Set-guarded scalars and name-array edits. +function Get-EditAction { + param( + [string[]] $BodyLines, + [hashtable] $VarMap + ) + + $records = [System.Collections.Generic.List[object]]::new() + + for ($i = 0; $i -lt $BodyLines.Count; $i++) { + $line = $BodyLines[$i] + + # if (Edit.SetFoo) { Template.Foo = Edit.Foo; } + if ($line -match 'if\s*\((\w+)\.Set(\w+)\)') { + $guardVar = $Matches[1] + $field = $Matches[2] + if (-not $VarMap.ContainsKey($guardVar)) { continue } + + $gameField = $null + for ($j = $i + 1; $j -lt [Math]::Min($i + 20, $BodyLines.Count); $j++) { + $inner = $BodyLines[$j] + if ($inner -match ('^\s*([\w\.\[\]]+)\s*=\s*' + [regex]::Escape($guardVar) + '\.' + [regex]::Escape($field) + '\s*;')) { + $gameField = Get-GameFieldFromTarget $Matches[1] + break + } + if ($j -gt $i + 1 -and $inner -match '^\s*if\s*\(') { break } + } + + $records.Add(@{ Kind = 'scalar'; Struct = $VarMap[$guardVar]; Config = $field; GameField = $gameField }) + continue + } + + # ApplyNameArrayEdit(..., Template.Foo, Edit.Foo, Edit.FooMode, ...) + if ($line -match 'Apply(Name|EffectReason)ArrayEdit\s*\(') { + $callArgs = [System.Collections.Generic.List[string]]::new() + for ($j = $i + 1; $j -lt [Math]::Min($i + 10, $BodyLines.Count); $j++) { + $arg = $BodyLines[$j].Trim().TrimEnd(',') + if ($arg -match '^\);?$') { break } + $callArgs.Add(($arg -replace '\);?$', '')) + } + if ($callArgs.Count -ge 5) { + $gameField = Get-GameFieldFromTarget $callArgs[2] + if ($callArgs[3] -match '^(\w+)\.(\w+)$' -and $VarMap.ContainsKey($Matches[1])) { + $records.Add(@{ Kind = 'namearray'; Struct = $VarMap[$Matches[1]]; Config = $Matches[2]; GameField = $gameField; ReplaceOnly = $false }) + } + } + continue + } + + # if (Edit.Foo.Length > 0) { ... } - moded when a FooMode is consulted, replace-only otherwise. + if ($line -match 'if\s*\((\w+)\.(\w+)\.Length\s*>\s*0\)') { + $guardVar = $Matches[1] + $field = $Matches[2] + if (-not $VarMap.ContainsKey($guardVar)) { continue } + + $hasMode = $false + for ($j = $i + 1; $j -lt [Math]::Min($i + 4, $BodyLines.Count); $j++) { + if ($BodyLines[$j] -match ('\.' + [regex]::Escape($field) + 'Mode\s*==')) { $hasMode = $true; break } + } + + $gameField = $null + for ($j = $i + 1; $j -lt [Math]::Min($i + 10, $BodyLines.Count); $j++) { + if ($BodyLines[$j] -match ('^\s*([\w\.\[\]]+)\s*=\s*' + [regex]::Escape($guardVar) + '\.' + [regex]::Escape($field) + '\s*;')) { + $gameField = Get-GameFieldFromTarget $Matches[1] + break + } + } + + if (-not $hasMode -and $null -eq $gameField) { continue } + $records.Add(@{ Kind = 'namearray'; Struct = $VarMap[$guardVar]; Config = $field; GameField = $gameField; ReplaceOnly = (-not $hasMode) }) + continue + } + } + + return $records +} + +#endregion + +if ($PrintSourceHash) { + Write-Output (Get-SourceHash $ClassesDir) + exit 0 +} + +#region Curated content the parser cannot infer from code + +$Curated = @{ + + Families = @( + @{ Name = 'Costs'; ConfigKey = 'Costs'; Struct = 'CostEdit'; Root = 'X2AbilityCostEditor'; Registry = 'CostEditors'; HelperApply = 'ApplyCostEdit' + Intro = 'Edits the `AbilityCosts` array of the template. Costs are edited **in place** when a cost of the given `Class` already exists; otherwise behaviour depends on the modes below. Fields you do not `Set` keep their current value.' } + @{ Name = 'Cooldown'; ConfigKey = 'Cooldown'; Struct = 'CooldownEdit'; Root = 'X2AbilityCooldownEditor'; Registry = 'CooldownEditors'; HelperApply = 'ApplyCooldownEdit' + Intro = 'Edits the template''s `AbilityCooldown`. With `Class` **omitted**, the existing cooldown is edited **in place** (no-op if the ability has none). With `Class` set, the existing cooldown is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class''s default value.' } + @{ Name = 'Charges'; ConfigKey = 'Charges'; Struct = 'ChargesEdit'; Root = 'X2AbilityChargesEditor'; Registry = 'ChargesEditors'; HelperApply = 'ApplyChargesEdit' + Intro = 'Edits the template''s `AbilityCharges`. With `Class` **omitted**, the existing charges object is edited **in place** (no-op if the ability has none). With `Class` set, the existing object is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class''s default value. `RemoveCharges=true` removes the charges object entirely.' } + @{ Name = 'Effects'; ConfigKey = 'Effects'; Struct = 'EffectEdit'; Root = 'X2AbilityEffectsEditor'; Registry = 'EffectsEditors'; HelperApply = 'ApplyEffectEdit' + Intro = 'Edits the effect arrays of the template. `Slot` selects which array is edited (see `EAbilityEffectSlot`). Within the selected array the effect of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`.' } + @{ Name = 'Conditions'; ConfigKey = ''; Struct = 'ConditionEdit'; Root = 'X2AbilityConditionEditor'; Registry = 'ConditionEditors'; HelperApply = 'ApplyConditionEdits' + Intro = 'Conditions can be edited in seven places: the template-level arrays (`ShooterConditions`, `TargetConditions`, `MultiTargetConditions` directly inside an `AbilityEdit`) and, inside an `Effects` entry, the effect''s own `TargetConditions` plus the class-specific `ApplyDamageModConditions`, `LethalDamageConditions` and `ToHitConditions`. All take an array of `ConditionEdit` entries. Within the targeted array, the condition of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`.' } + @{ Name = 'ToHitCalc'; ConfigKey = 'ToHitCalc'; Struct = 'ToHitCalcEdit'; Root = 'X2AbilityToHitCalcEditor'; Registry = 'ToHitCalcEditors'; HelperApply = 'ApplyToHitCalcEdit' + Intro = 'Edits the template''s to-hit calculation. Two slots exist: `ToHitCalc` (`Template.AbilityToHitCalc`) and `ToHitOwnerOnMissCalc` (`Template.AbilityToHitOwnerOnMissCalc`), both taking a `ToHitCalcEdit` block. With `Class` **omitted**, the existing calc is edited **in place**; with `Class` set, the existing calc is edited in place when it is already exactly that class, otherwise it is **replaced** by a new instance (unset fields then take class defaults). Classes without a dedicated editor below (e.g. `X2AbilityToHitCalc_StandardMelee`, `X2AbilityToHitCalc_DeadEye`) are still valid `Class` values — they get the fields of their nearest listed ancestor.' } + @{ Name = 'TargetStyle'; ConfigKey = 'TargetStyle'; Struct = 'TargetStyleEdit'; Root = 'X2AbilityTargetStyleEditor'; Registry = 'TargetStyleEditors'; HelperApply = 'ApplyTargetStyleEdit' + Intro = 'Edits `Template.AbilityTargetStyle` (how the ability picks its primary target). Same in-place/replace semantics as `ToHitCalc`. Field-less styles (`X2AbilityTarget_Self`, `X2AbilityTarget_Path`, ...) are valid `Class` values for swapping the style.' } + @{ Name = 'MultiTargetStyle'; ConfigKey = 'MultiTargetStyle'; Struct = 'MultiTargetStyleEdit'; Root = 'X2AbilityMultiTargetStyleEditor'; Registry = 'MultiTargetStyleEditors'; HelperApply = 'ApplyMultiTargetStyleEdit' + Intro = 'Edits the template''s multi-target styles. Two slots exist: `MultiTargetStyle` (`Template.AbilityMultiTargetStyle`) and `PassiveAOEStyle` (`Template.AbilityPassiveAOEStyle`), both taking a `MultiTargetStyleEdit` block. Same in-place/replace semantics as `ToHitCalc`.' } + @{ Name = 'Triggers'; ConfigKey = 'Triggers'; Struct = 'TriggerEdit'; Root = 'X2AbilityTriggerEditor'; Registry = 'TriggerEditors'; HelperApply = 'ApplyTriggerEdits' + Intro = 'Edits the `AbilityTriggers` array of the template. The trigger of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`. **Caveat:** adding a *new* `X2AbilityTrigger_EventListener` from config is rarely useful — its `ListenerData.EventFn` delegate can only be assigned in code and stays `none`. Editing an existing listener trigger preserves its `EventFn`. `X2AbilityTrigger_OnAbilityActivated` is handled by the EventListener editor (its `MatchAbilityActivated` field is protected and cannot be set). See also `AbilityEventListenerEdits` in the template fields for the separate `Template.AbilityEventListeners` array.' } + ) + + StructuralFieldNotes = @{ + 'AbilityEdit.Ability' = 'Required. Template name of the ability to edit (e.g. `SwordSlice`).' + 'CostEdit.Class' = 'Cost class to target/instantiate, e.g. `X2AbilityCost_ActionPoints`. Bare names are auto-prefixed with `XComGame.`; empty falls back to `X2AbilityCost`.' + 'CostEdit.Mode' = 'Per-entry edit mode (`EAbilityCostEditMode`), see [Edit modes](#edit-modes).' + 'CooldownEdit.Class' = 'Optional. Omitted = edit the existing cooldown in place. Set = target/instantiate that class, e.g. `X2AbilityCooldown_PerPlayerType`. Bare names are auto-prefixed with `XComGame.`.' + 'ChargesEdit.Class' = 'Optional. Omitted = edit the existing charges object in place. Set = target/instantiate that class, e.g. `X2AbilityCharges_GremlinHeal`. Bare names are auto-prefixed with `XComGame.`.' + 'ChargesEdit.RemoveCharges' = 'Set to true to remove the ability''s charges object entirely. No `Class` needed; the other fields of the block are ignored.' + 'ToHitCalcEdit.Class' = 'Optional. Omitted = edit the existing calc in place. Set = target/instantiate that class, e.g. `X2AbilityToHitCalc_StandardAim`. Bare names are auto-prefixed with `XComGame.`.' + 'ToHitCalcEdit.HitModifiers' = '**Replace-only**: when non-empty, replaces the calc''s always-on `HitModifiers` array entirely (`ShotModifierInfo`: `ModType`, `Value`, `Reason`).' + 'ToHitCalcEdit.CustomProperties' = 'Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors.' + 'TargetStyleEdit.Class' = 'Optional. Omitted = edit the existing style in place. Set = target/instantiate that class, e.g. `X2AbilityTarget_Cursor`. Bare names are auto-prefixed with `XComGame.`.' + 'TargetStyleEdit.CustomProperties' = 'Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors.' + 'MultiTargetStyleEdit.Class' = 'Optional. Omitted = edit the existing style in place. Set = target/instantiate that class, e.g. `X2AbilityMultiTarget_Radius`. Bare names are auto-prefixed with `XComGame.`.' + 'MultiTargetStyleEdit.CustomProperties' = 'Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors.' + 'TriggerEdit.Class' = 'Trigger class to target/instantiate, e.g. `X2AbilityTrigger_UnitPostBeginPlay`. Bare names are auto-prefixed with `XComGame.`.' + 'TriggerEdit.Mode' = 'Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes).' + 'TriggerEdit.CustomProperties' = 'Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors.' + 'EffectEdit.EffectHitModifiers' = '**Replace-only**: when non-empty, replaces `X2Effect_ToHitModifier.Modifiers` entirely (`EffectHitModifier` entries, incl. `MatchToHit` class ref via qualified name).' + 'EffectEdit.CustomProperties' = 'Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors.' + 'ConditionEdit.CustomProperties' = 'Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors.' + 'AbilityEventListenerEdit.EventID' = 'Matches the existing `Template.AbilityEventListeners` entry to edit. Entries cannot be added (their `EventFn` delegate is code-only).' + 'EffectEdit.Class' = 'Effect class to target/instantiate, e.g. `X2Effect_ApplyWeaponDamage`. Bare names are auto-prefixed with `XComGame.`; empty falls back to `X2Effect`.' + 'EffectEdit.Slot' = 'Which effect array to edit (`EAbilityEffectSlot`): `eAES_Target`, `eAES_MultiTarget` or `eAES_Shooter`.' + 'EffectEdit.Mode' = 'Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes).' + 'ConditionEdit.Class' = 'Condition class to target/instantiate, e.g. `X2Condition_UnitProperty`. Bare names are auto-prefixed with `XComGame.`.' + 'ConditionEdit.Mode' = 'Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes).' + 'AdditionalCooldownEdit.AbilityName' = 'Ability whose cooldown entry is added/updated in `AditionalAbilityCooldowns`.' + 'AdditionalCooldownEdit.ApplyCooldownType' = '`AdditionalCooldown_ApplyLarger` or `AdditionalCooldown_ApplySmaller`. Applied when non-empty.' + 'BonusChargeEdit.AbilityName' = 'Ability that grants the bonus charges.' + } + + NestedGameFields = @{ + 'CooldownEdit.AdditionalCooldowns' = 'AditionalAbilityCooldowns' + 'ChargesEdit.BonusCharges' = 'BonusCharges' + 'EffectEdit.StatChange' = 'm_aStatChanges' + 'EffectEdit.WeaponDamageValue' = 'EffectDamageValue' + 'EffectEdit.TargetConditions' = 'TargetConditions' + } + + NestedLinks = @{ + 'ConditionEdit' = '[Conditions](#conditions)' + } + + EnumSemantics = @{ + 'ENameArrayEditMode' = @{ + 'eNAEM_Replace' = 'Replace the whole target array with the provided values. (Default)' + 'eNAEM_Merge' = 'Append each provided value that is not already present.' + 'eNAEM_AddOnly' = 'Set the provided values **only if the target array is currently empty**; otherwise do nothing. It does not append.' + 'eNAEM_Remove' = 'Remove each provided value from the target array.' + } + 'EAbilityCostEditMode' = @{ + 'eACEM_ReplaceAll' = 'As `CostMode`: clear **all** existing costs before applying the entries. As per-entry `Mode`: edit in place if a cost of that class exists, otherwise skip (unless `CostMode=eACEM_ReplaceAll`, in which case a new cost is added). (Default)' + 'eACEM_Merge' = 'Edit the existing cost of that class in place; if none exists, instantiate and add it.' + 'eACEM_AddOnly' = 'Same as `eACEM_Merge`: edit in place if present, otherwise add.' + 'eACEM_Remove' = 'Remove the cost of that class from the ability.' + } + 'EArrayEditMode' = @{ + 'eAEM_ReplaceAll' = 'Clear the whole target array, then add this effect/condition. (Default)' + 'eAEM_Merge' = 'Edit the existing effect/condition of that class in place; if none exists, instantiate and add it.' + 'eAEM_AddOnly' = 'Same as `eAEM_Merge`: edit in place if present, otherwise add.' + 'eAEM_Remove' = 'Remove the first effect/condition of that class from the target array.' + } + 'EChargesBonusMode' = @{ + 'eCBM_Replace' = 'Clear existing `BonusCharges` entries before applying yours. (Default)' + 'eCBM_Merge' = 'Update the entry for each `AbilityName` if present, otherwise add it.' + } + 'EAdditionalCooldownEditMode' = @{ + 'eACEM_Replace' = 'Clear existing `AditionalAbilityCooldowns` entries before applying yours. (Default)' + 'eACEM_Merge' = 'Update the entry for each `AbilityName` if present, otherwise add it.' + } + 'EStatChangeMode' = @{ + 'eSCM_Replace' = 'Clear existing stat changes (`m_aStatChanges`) before applying yours. (Default)' + 'eSCM_Merge' = 'Update the entry for each `StatType` if present, otherwise add it.' + } + 'EAbilityEffectSlot' = @{ + 'eAES_Target' = 'Edit `AbilityTargetEffects` (effects applied to the primary target). (Default)' + 'eAES_MultiTarget' = 'Edit `AbilityMultiTargetEffects`.' + 'eAES_Shooter' = 'Edit `AbilityShooterEffects` (effects applied to the shooter).' + } + } + + KnownIssues = @() +} + +# Mode fields whose target array cannot be derived from the name alone. +$NestedModeAlias = @{ + 'AdditionalCooldownMode' = 'AdditionalCooldowns' + 'CostMode' = 'Costs' + 'TargetConditionsMode' = 'TargetConditionClasses' +} + +#endregion + +#region 1. Parse AE_DataStructures.uc (enums + structs) + +$Enums = [System.Collections.Generic.List[object]]::new() +$Structs = @{} +$StructOrder = [System.Collections.Generic.List[string]]::new() + +$mode = '' +$blockName = '' +$currentEnum = $null +$comment = [System.Collections.Generic.List[string]]::new() + +foreach ($line in (Read-TextFile $DataStructuresFile)) { + $trim = $line.Trim() + + if ($mode -eq '') { + if ($trim -match '^enum\s+(\w+)$') { + $mode = 'enum' + $currentEnum = @{ Name = $Matches[1]; Values = [System.Collections.Generic.List[string]]::new() } + $Enums.Add($currentEnum) + } + elseif ($trim -match '^struct\s+(\w+)$') { + $mode = 'struct' + $blockName = $Matches[1] + $Structs[$blockName] = [System.Collections.Generic.List[object]]::new() + $StructOrder.Add($blockName) + $comment.Clear() + } + continue + } + + if ($trim -match '^};') { $mode = ''; continue } + if ($trim -eq '{') { continue } + + if ($mode -eq 'enum') { + if ($trim -match '^(\w+),?$') { $currentEnum.Values.Add($Matches[1]) } + continue + } + + # struct body: line comments above a var declaration become its description + if ($trim -match '^//\s?(.*)$') { $comment.Add($Matches[1]); continue } + if ($trim -eq '') { $comment.Clear(); continue } + if ($trim -match '^var\s+([\w<>]+)\s+(\w+);') { + $Structs[$blockName].Add(@{ + Name = $Matches[2] + Type = $Matches[1] + Description = ($comment -join ' ') + }) + $comment.Clear() + } +} + +$StructNames = $StructOrder.ToArray() + +# Classify struct fields: guard / optionalScalar / mode / nested / modedArray / plainArray / plain. +foreach ($structName in $StructOrder) { + $fields = $Structs[$structName] + $names = @($fields | ForEach-Object { $_.Name }) + + $modeTargets = @{} + foreach ($f in $fields) { + if ($f.Name -match '^(\w+)Mode$') { + $base = $Matches[1] + $target = $null + if ($NestedModeAlias.ContainsKey($f.Name)) { $target = $NestedModeAlias[$f.Name] } + elseif ($names -contains $base) { $target = $base } + elseif ($names -contains ($base + 's')) { $target = $base + 's' } + if ($null -ne $target) { $modeTargets[$f.Name] = $target } + } + } + + $modeFieldNames = @($modeTargets.Keys) + $arrayToMode = @{} + foreach ($k in $modeFieldNames) { $arrayToMode[$modeTargets[$k]] = $k } + + foreach ($f in $fields) { + $f.Kind = 'plain' + $f.Guard = $null + $f.ModeField = $null + $f.ModeEnum = $null + $f.Consumed = $false + + if ($f.Name -match '^Set(\w+)$' -and $f.Type -eq 'bool' -and $names -contains $Matches[1]) { + $f.Kind = 'guard' + continue + } + if ($names -contains ('Set' + $f.Name)) { + $f.Kind = 'optionalScalar' + $f.Guard = 'Set' + $f.Name + continue + } + if ($modeFieldNames -contains $f.Name) { + $f.Kind = 'mode' + continue + } + + $isStructArray = $f.Type -match '^array<(\w+)>$' -and $StructNames -contains $Matches[1] + if ($isStructArray -or ($StructNames -contains $f.Type)) { + $f.Kind = 'nested' + if ($arrayToMode.ContainsKey($f.Name)) { + $f.ModeField = $arrayToMode[$f.Name] + $f.ModeEnum = ($fields | Where-Object { $_.Name -eq $f.ModeField }).Type + } + continue + } + + if ($f.Type -match '^array<') { + if ($arrayToMode.ContainsKey($f.Name)) { + $f.Kind = 'modedArray' + $f.ModeField = $arrayToMode[$f.Name] + $f.ModeEnum = ($fields | Where-Object { $_.Name -eq $f.ModeField }).Type + } + else { + $f.Kind = 'plainArray' + } + continue + } + } +} + +#endregion + +#region 2. Parse X2DLCInfo_AbilityEditor.uc (registries, wiring, template-level fields) + +$dlcLines = Read-TextFile $DlcInfoFile +$dlcText = $dlcLines -join "`n" + +$Registries = @{} +foreach ($m in [regex]::Matches($dlcText, "(?m)^\s*(\w+Editors)\((\d+)\)\s*=\s*class'(\w+)'")) { + $reg = $m.Groups[1].Value + if (-not $Registries.ContainsKey($reg)) { $Registries[$reg] = [System.Collections.Generic.List[object]]::new() } + $Registries[$reg].Add(@{ Index = [int]$m.Groups[2].Value; Class = $m.Groups[3].Value }) +} +foreach ($reg in @($Registries.Keys)) { + $Registries[$reg] = @($Registries[$reg] | Sort-Object { $_.Index } | ForEach-Object { $_.Class }) +} + +$dlcBlocks = Get-FunctionBlockMap $dlcLines +$dlcVarMap = Get-VarTypeMap $dlcText $StructNames + +$TemplateFields = @() +$templateEditorFile = Join-Path $ClassesDir 'X2AbilityTemplateEditor.uc' +if (Test-Path $templateEditorFile) { + $teLines = Read-TextFile $templateEditorFile + $teBlocks = Get-FunctionBlockMap $teLines + $teVarMap = Get-VarTypeMap ($teLines -join "`n") $StructNames + if ($teBlocks.ContainsKey('ApplyTemplateEdit')) { + $TemplateFields = @(Get-EditAction $teBlocks['ApplyTemplateEdit'] $teVarMap | Where-Object { $_.Struct -eq 'AbilityEdit' }) + } +} +elseif ($dlcBlocks.ContainsKey('ApplyAbilityEdit')) { + $TemplateFields = @(Get-EditAction $dlcBlocks['ApplyAbilityEdit'] $dlcVarMap | Where-Object { $_.Struct -eq 'AbilityEdit' }) +} + +$applyBody = '' +if ($dlcBlocks.ContainsKey('ApplyAbilityEdit')) { + $applyBody = $dlcBlocks['ApplyAbilityEdit'] -join "`n" +} +$applyBodyCode = ($applyBody -split "`n" | Where-Object { $_ -notmatch '^\s*//' }) -join "`n" + +#endregion + +#region 3. Parse editor classes + +$EditorFiles = Get-ChildItem -LiteralPath $ClassesDir -Filter 'X2Ability*Editor*.uc' -File | + Where-Object { $_.Name -notmatch '_Helper\.uc$' -and $_.Name -notmatch '^X2AbilityEditor_' } + +$Editors = @{} # class name -> record +foreach ($file in $EditorFiles) { + $lines = Read-TextFile $file.FullName + $text = $lines -join "`n" + + if ($text -notmatch '(?m)^class\s+(\w+)\s+extends\s+([\w\.]+)') { continue } + $className = $Matches[1] + $extends = $Matches[2] -replace '^.*\.', '' + + $blocks = Get-FunctionBlockMap $lines + $varMap = Get-VarTypeMap $text $StructNames + + $gameClass = $null + $catchAll = $false + if ($blocks.ContainsKey('CanEdit')) { + $canEditBody = $blocks['CanEdit'] -join "`n" + if ($canEditBody -match "IsA\('(\w+)'\)") { + $gameClass = $Matches[1] + } + elseif ($canEditBody -match '(?m)^\s*return\s+true\s*;') { + $catchAll = $true + } + } + + $functions = @{} + foreach ($fnName in $blocks.Keys) { + $functions[$fnName] = @(Get-EditAction $blocks[$fnName] $varMap) + } + + $Editors[$className] = @{ + Class = $className + Extends = $extends + GameClass = $gameClass + CatchAll = $catchAll + Blocks = $blocks + VarMap = $varMap + Functions = $functions + Text = $text + File = $file.Name + } +} + +#endregion + +#region 4. Resolve families: dispatch order, wiring, effective fields per editor + +function Get-ExtendsChain { + param([string] $ClassName) + + $chain = [System.Collections.Generic.List[string]]::new() + $cur = $ClassName + while ($null -ne $cur -and $Editors.ContainsKey($cur)) { + $chain.Add($cur) + $cur = $Editors[$cur].Extends + } + return $chain.ToArray() +} + +# Classes that actually contribute to $FnName: walks up the chain while each one calls super. +function Get-DefinerChain { + param( + [string] $ClassName, + [string] $FnName + ) + + $result = [System.Collections.Generic.List[string]]::new() + $chain = Get-ExtendsChain $ClassName + $idx = 0 + + while ($idx -lt $chain.Count) { + $definer = $null + for (; $idx -lt $chain.Count; $idx++) { + $ed = $Editors[$chain[$idx]] + if ($ed.Blocks.ContainsKey($FnName) -and ($ed.Blocks[$FnName] -join "`n") -match '\{') { + $definer = $chain[$idx] + break + } + } + if ($null -eq $definer) { break } + + $result.Add($definer) + if (($Editors[$definer].Blocks[$FnName] -join "`n") -notmatch ('super\.' + $FnName)) { break } + $idx++ + } + + return $result.ToArray() +} + +$Warnings = [System.Collections.Generic.List[string]]::new() +$FamilyModels = [System.Collections.Generic.List[object]]::new() + +foreach ($fam in $Curated.Families) { + $structName = $fam.Struct + $structFields = $Structs[$structName] + + $registry = @() + if ($Registries.ContainsKey($fam.Registry)) { + $registry = $Registries[$fam.Registry] + } + else { + $Warnings.Add("Registry $($fam.Registry) not found in X2DLCInfo_AbilityEditor.uc") + } + + $wired = $applyBodyCode -match ($fam.HelperApply + '\s*\(') + $nestedFields = @($structFields | Where-Object { $_.Kind -eq 'nested' }) + + $editorModels = [System.Collections.Generic.List[object]]::new() + foreach ($cls in $registry) { + if (-not $Editors.ContainsKey($cls)) { + $Warnings.Add("Registered editor $cls has no parsed source file") + continue + } + $ed = $Editors[$cls] + + $fields = [System.Collections.Generic.List[object]]::new() + foreach ($pair in @(@('ApplyBaseEdit', 'base'), @('ApplyDerivedEdit', 'derived'))) { + $fn = $pair[0] + $origin = $pair[1] + + foreach ($definer in (Get-DefinerChain $cls $fn)) { + $srcEd = $Editors[$definer] + $inheritedFrom = $null + if ($definer -ne $cls) { $inheritedFrom = $definer } + + foreach ($rec in $srcEd.Functions[$fn]) { + if ($rec.Struct -ne $structName) { continue } + if ($fields | Where-Object { $_.config -eq $rec.Config }) { continue } + + $structField = $structFields | Where-Object { $_.Name -eq $rec.Config } + $type = '' + $desc = '' + if ($structField) { + $structField.Consumed = $true + $type = $structField.Type + $desc = $structField.Description + } + + $entry = [ordered]@{ + config = $rec.Config + type = $type + kind = $rec.Kind + gameField = $rec.GameField + origin = $origin + inheritedFrom = $inheritedFrom + description = $desc + } + if ($rec.Kind -eq 'scalar') { + $entry.guard = 'Set' + $rec.Config + } + if ($rec.Kind -eq 'namearray') { + if ($rec.ReplaceOnly) { + $entry.replaceOnly = $true + } + else { + $entry.modeField = $rec.Config + 'Mode' + if ($structField -and $structField.ModeField) { $entry.modeField = $structField.ModeField } + if ($structField -and $structField.ModeEnum) { $entry.modeEnum = $structField.ModeEnum } + + $modeStructField = $structFields | Where-Object { $_.Name -eq $entry.modeField } + if ($modeStructField) { $modeStructField.Consumed = $true } + } + } + $fields.Add($entry) + } + + # nested struct arrays referenced in this function body + $body = $srcEd.Blocks[$fn] -join "`n" + foreach ($nf in $nestedFields) { + if ($body -notmatch ('\.' + [regex]::Escape($nf.Name) + '\b')) { continue } + if ($fields | Where-Object { $_.config -eq $nf.Name }) { continue } + + $nf.Consumed = $true + $gameField = $null + $key = "$structName.$($nf.Name)" + if ($Curated.NestedGameFields.ContainsKey($key)) { $gameField = $Curated.NestedGameFields[$key] } + + $entry = [ordered]@{ + config = $nf.Name + type = $nf.Type + kind = 'nested' + gameField = $gameField + origin = $origin + inheritedFrom = $inheritedFrom + description = $nf.Description + } + if ($nf.ModeField) { + $entry.modeField = $nf.ModeField + $entry.modeEnum = $nf.ModeEnum + + $modeStructField = $structFields | Where-Object { $_.Name -eq $nf.ModeField } + if ($modeStructField) { $modeStructField.Consumed = $true } + } + $fields.Add($entry) + } + } + } + + $editorModels.Add([ordered]@{ + class = $cls + extends = $ed.Extends + gameClass = $ed.GameClass + catchAll = $ed.CatchAll + fields = $fields.ToArray() + }) + } + + $FamilyModels.Add([ordered]@{ + name = $fam.Name + configKey = $fam.ConfigKey + editStruct = $structName + wired = [bool]$wired + dispatchOrder = $registry + intro = $fam.Intro + editors = $editorModels.ToArray() + }) + + if (-not $wired) { + $Warnings.Add("Family '$($fam.Name)' is NOT wired: ApplyAbilityEdit does not call $($fam.HelperApply). Its config entries are currently ignored.") + } +} + +#endregion + +#region 4b. SDK enrichment: abstract badges, non-editable field lists, dispatch-order validation + +if (-not $SdkPath) { + $vsSettings = Join-Path $env:APPDATA 'Code\User\settings.json' + if (Test-Path $vsSettings) { + try { $SdkPath = (Get-Content $vsSettings -Raw | ConvertFrom-Json).'xcom.highlander.sdkroot' } + catch { Write-Verbose "Could not read 'xcom.highlander.sdkroot' from $vsSettings." } + } +} + +$SdkClassesDir = $null +if ($SdkPath -and (Test-Path (Join-Path $SdkPath 'Development\Src\XComGame\Classes'))) { + $SdkClassesDir = Join-Path $SdkPath 'Development\Src\XComGame\Classes' +} +else { + Write-Information 'SDK not found - skipping abstract/non-editable/dispatch-order enrichment (pass -SdkPath to enable).' +} + +$SdkCache = @{} + +# Reads a game class from the SDK: parent, abstract flag, and why each var is not config-editable. +function Get-SdkClassInfo { + param([string] $GameClass) + + if ($SdkCache.ContainsKey($GameClass)) { return $SdkCache[$GameClass] } + + $result = $null + $file = Join-Path $SdkClassesDir "$GameClass.uc" + if (Test-Path $file) { + $text = [System.IO.File]::ReadAllText($file) + $text = [regex]::Replace($text, '/\*.*?\*/', '', 'Singleline') + + $extends = $null + $abstract = $false + $vars = [System.Collections.Generic.List[object]]::new() + $depth = 0 + $inDefaults = $false + + foreach ($raw in ($text -split "`r?`n")) { + $line = ($raw -replace '//.*$', '').Trim() + + if ($null -eq $extends -and $line -match '^class\s+\w+\s+extends\s+([\w\.]+)') { + $extends = $Matches[1] -replace '^.*\.', '' + if ($line -match '\babstract\b') { $abstract = $true } + } + if ($line -match '^defaultproperties') { $inDefaults = $true } + if ($inDefaults) { continue } + if ($line -match '^struct\s') { $depth++; continue } + if ($depth -gt 0) { + if ($line -match '^};') { $depth-- } + continue + } + if ($line -notmatch '^var(\(\w*\))?\s+(.*)$') { continue } + + $rest = $Matches[2].Trim() + $reason = $null + if ($rest -match '^(config|globalconfig)\b') { $reason = 'config — tune it in the game''s own ini' } + elseif ($rest -match '^localized\b') { $reason = 'localized — use .int localization files' } + elseif ($rest -match '^(private|privatewrite|protected|protectedwrite)\b') { $reason = 'private/protected' } + elseif ($rest -match '^deprecated\b') { $reason = 'deprecated' } + elseif ($rest -match '^(transient|duplicatetransient)\b') { $reason = 'transient' } + elseif ($rest -match 'delegate<') { $reason = 'delegate — code-only' } + + # strip neutral modifiers to reach the type token + $declaration = $rest -replace '^(init|instanced|editinline\w*|noimport|repnotify|const|editconst|native(\(\w+\))?)\s+', '' + if ($declaration -notmatch '^(array<\s*[\w\.]+\s*>|class(<[\w\.]+>)?|[\w\.<>]+)\s+(\w+(?:\s*,\s*\w+)*)\s*[;\[]') { continue } + + $typeTok = $Matches[1] + $varNames = $Matches[3] -split '\s*,\s*' + if ($null -eq $reason) { + if ($typeTok -match '^class') { + $reason = 'class reference' + } + elseif ($typeTok -match '^array<\s*([\w\.]+)\s*>$') { + $inner = $Matches[1] -replace '^.*\.', '' + if ($inner -ne 'name') { $reason = "array of ``$inner``" } + } + elseif ($typeTok -notin 'bool', 'int', 'float', 'name', 'string' -and $typeTok -notmatch '^E\w+$' -and $typeTok -notmatch 'Deferral|Filter') { + # not a primitive and doesn't look like an enum: struct or object ref + $reason = "type ``$typeTok``" + } + } + + foreach ($v in $varNames) { + $vars.Add(@{ Name = $v; Type = $typeTok; Reason = $reason }) + } + } + + $result = @{ Extends = $extends; Abstract = $abstract; Vars = $vars.ToArray() } + } + + $SdkCache[$GameClass] = $result + return $result +} + +function Get-SdkAncestor { + param([string] $GameClass) + + $ancestors = [System.Collections.Generic.List[string]]::new() + $cur = $GameClass + for ($d = 0; $d -lt 20; $d++) { + $info = Get-SdkClassInfo $cur + if ($null -eq $info -or -not $info.Extends) { break } + $ancestors.Add($info.Extends) + $cur = $info.Extends + } + return $ancestors.ToArray() +} + +$TemplateNotEditable = @() +if ($SdkClassesDir) { + # Everything on X2AbilityTemplate that is neither a covered scalar nor handled by a family. + $tmplInfo = Get-SdkClassInfo 'X2AbilityTemplate' + if ($tmplInfo) { + $tmplCovered = @($TemplateFields | Where-Object { $_.GameField } | ForEach-Object { ($_.GameField -split '[\.\[]')[0] }) + $tmplCovered += @('AbilityCosts', 'AbilityCooldown', 'AbilityCharges', 'AbilityToHitCalc', 'AbilityToHitOwnerOnMissCalc', + 'AbilityTargetStyle', 'AbilityMultiTargetStyle', 'AbilityTriggers', 'AbilityEventListeners', + 'AbilityShooterConditions', 'AbilityTargetConditions', 'AbilityMultiTargetConditions', + 'AbilityTargetEffects', 'AbilityMultiTargetEffects', 'AbilityShooterEffects') + + $TemplateNotEditable = @($tmplInfo.Vars | Where-Object { $_.Name -notin $tmplCovered } | ForEach-Object { + $reason = $_.Reason + if ($null -eq $reason) { $reason = 'not covered (deliberate core-set choice)' } + [ordered]@{ name = $_.Name; reason = $reason } + }) + } + + foreach ($famModel in $FamilyModels) { + $concrete = @($famModel.editors | Where-Object { $_.gameClass }) + + foreach ($ed in $concrete) { + $info = Get-SdkClassInfo $ed.gameClass + if ($null -eq $info) { continue } + $ed.abstract = [bool]$info.Abstract + + # covered = first segment of every game field this editor applies + $covered = @($ed.fields | Where-Object { $_.gameField } | ForEach-Object { ($_.gameField -split '[\.\[]')[0] }) + $notEditable = [System.Collections.Generic.List[object]]::new() + foreach ($v in $info.Vars) { + if ($v.Name -in $covered) { continue } + $reason = $v.Reason + if ($null -eq $reason) { $reason = 'not yet supported' } + $notEditable.Add([ordered]@{ name = $v.Name; reason = $reason }) + } + $ed.notEditable = $notEditable.ToArray() + } + + # dispatch-order validation: a class must not be preceded by one of its ancestors + for ($jj = 0; $jj -lt $concrete.Count; $jj++) { + $anc = Get-SdkAncestor $concrete[$jj].gameClass + for ($ii = 0; $ii -lt $jj; $ii++) { + if ($concrete[$ii].gameClass -in $anc) { + $Warnings.Add("Dispatch order ($($famModel.name)): $($concrete[$jj].class) is registered after $($concrete[$ii].class), but $($concrete[$jj].gameClass) derives from $($concrete[$ii].gameClass) - it will never be dispatched.") + } + } + } + } +} + +#endregion + +#region 4c. Consumption tracking and orphan warnings + +# Template-level consumption + nested family keys on AbilityEdit +foreach ($rec in $TemplateFields) { + $sf = $Structs['AbilityEdit'] | Where-Object { $_.Name -eq $rec.Config } + if (-not $sf) { continue } + + $sf.Consumed = $true + if ($sf.ModeField) { + $msf = $Structs['AbilityEdit'] | Where-Object { $_.Name -eq $sf.ModeField } + if ($msf) { $msf.Consumed = $true } + } +} + +foreach ($fam in $Curated.Families) { + $sf = $Structs['AbilityEdit'] | Where-Object { $_.Name -eq $fam.ConfigKey } + if ($sf) { $sf.Consumed = $true } + + $famModel = $FamilyModels | Where-Object { $_.name -eq $fam.Name } + if ($sf -and $sf.ModeField -and $famModel.wired) { + $msf = $Structs['AbilityEdit'] | Where-Object { $_.Name -eq $sf.ModeField } + if ($msf) { $msf.Consumed = $true } + } +} + +# Line comments are stripped first so commented-out scaffolding does not count as consumption. +$allEditorText = ConvertTo-CommentFreeText ((($Editors.Values | ForEach-Object { $_.Text }) -join "`n") + "`n" + $dlcText) +foreach ($structName in @('AdditionalCooldownEdit', 'BonusChargeEdit', 'StatChangeEdit', 'WeaponDamageValueEdit')) { + foreach ($f in $Structs[$structName]) { + if ($f.Kind -eq 'guard') { continue } + if ($allEditorText -match ('\.' + [regex]::Escape($f.Name) + '\b')) { $f.Consumed = $true } + } +} + +# Structural fields consumed via helpers (Class, Mode, Slot, RemoveCharges, ...) +$helperFiles = Get-ChildItem -LiteralPath $ClassesDir -Filter '*_Helper.uc' -File | Where-Object { $_.Name -ne 'Helper_AbilityEditor.uc' } +$helperText = ConvertTo-CommentFreeText (($helperFiles | ForEach-Object { [System.IO.File]::ReadAllText($_.FullName) }) -join "`n") +$combinedText = $allEditorText + "`n" + $helperText +foreach ($structName in $StructOrder) { + foreach ($f in $Structs[$structName]) { + if ($f.Consumed -or $f.Kind -eq 'guard') { continue } + if ($combinedText -match ('\.' + [regex]::Escape($f.Name) + '\b')) { $f.Consumed = $true } + } +} + +# Fields intentionally consumed by no built-in editor (bridge-mod surface). +$IntentionallyUnconsumed = @('CustomProperties', 'Key', 'Value', 'EditorClass', 'Priority') +foreach ($structName in $StructOrder) { + foreach ($f in $Structs[$structName]) { + if ($f.Kind -eq 'guard') { continue } + if ($structName -in @('AECustomProperty', 'ExtraEditorRegistration')) { continue } + if ($f.Name -in $IntentionallyUnconsumed) { continue } + if (-not $f.Consumed) { + $Warnings.Add("Orphan config field: $structName.$($f.Name) is declared but not consumed by any editor (not yet implemented?).") + } + } +} + +foreach ($w in $Curated.KnownIssues) { $Warnings.Add("Known issue: $w") } + +#endregion + +#region 5. Build the schema object + +$sha = Get-SourceHash $ClassesDir + +$schemaEnums = @($Enums | ForEach-Object { + $sem = $null + if ($Curated.EnumSemantics.ContainsKey($_.Name)) { $sem = $Curated.EnumSemantics[$_.Name] } + + $values = [System.Collections.Generic.List[object]]::new() + foreach ($v in $_.Values) { + $d = '' + if ($sem -and $sem.ContainsKey($v)) { $d = $sem[$v] } + $values.Add([ordered]@{ name = $v; description = $d }) + } + [ordered]@{ name = $_.Name; values = $values.ToArray() } +}) + +$schemaStructs = @($StructOrder | ForEach-Object { + $sn = $_ + $fields = [System.Collections.Generic.List[object]]::new() + foreach ($f in $Structs[$sn]) { + if ($f.Kind -eq 'guard') { continue } + + $desc = $f.Description + $key = "$sn.$($f.Name)" + if ($Curated.StructuralFieldNotes.ContainsKey($key)) { $desc = $Curated.StructuralFieldNotes[$key] } + + $entry = [ordered]@{ + name = $f.Name + type = $f.Type + kind = $f.Kind + description = $desc + } + if ($f.Guard) { $entry.guard = $f.Guard } + if ($f.ModeField) { $entry.modeField = $f.ModeField; $entry.modeEnum = $f.ModeEnum } + $fields.Add($entry) + } + [ordered]@{ name = $sn; fields = $fields.ToArray() } +}) + +# ApplyTemplateEdit gives the config name but not its type or doc comment; both live on AbilityEdit. +$abilityEditFields = @() +if ($Structs.ContainsKey('AbilityEdit')) { $abilityEditFields = $Structs['AbilityEdit'] } + +$schemaTemplate = @($TemplateFields | ForEach-Object { + $rec = $_ + $structField = $abilityEditFields | Where-Object { $_.Name -eq $rec.Config } | Select-Object -First 1 + + $type = '' + $desc = '' + if ($structField) { + $type = $structField.Type + $desc = $structField.Description + } + $key = "AbilityEdit.$($rec.Config)" + if ($Curated.StructuralFieldNotes.ContainsKey($key)) { $desc = $Curated.StructuralFieldNotes[$key] } + + $entry = [ordered]@{ + config = $rec.Config + type = $type + kind = $rec.Kind + gameField = $rec.GameField + description = $desc + } + if ($rec.Kind -eq 'scalar') { $entry.guard = 'Set' + $rec.Config } + if ($rec.Kind -eq 'namearray') { + if ($rec.ReplaceOnly) { + $entry.replaceOnly = $true + } + else { + $entry.modeField = $rec.Config + 'Mode' + if ($structField -and $structField.ModeField) { $entry.modeField = $structField.ModeField } + if ($structField -and $structField.ModeEnum) { $entry.modeEnum = $structField.ModeEnum } + } + } + $entry +}) + +$schema = [ordered]@{ + '$comment' = 'Generated by .scripts/generate-docs.ps1 - do not edit by hand.' + sourceHash = $sha + enums = $schemaEnums + structs = $schemaStructs + template = [ordered]@{ fields = $schemaTemplate; notEditable = $TemplateNotEditable } + families = $FamilyModels.ToArray() + warnings = $Warnings.ToArray() +} + +$schemaJson = ($schema | ConvertTo-Json -Depth 14) + "`n" + +#endregion + +#region 6. Render the markdown blocks + +function ConvertTo-CellText { + param([string] $Text) + + if ($null -eq $Text) { return '' } + return ($Text -replace '\|', '\|') +} + +function Format-FieldTable { + param([object[]] $Fields) + + $sb = [System.Text.StringBuilder]::new() + [void]$sb.Append("| Config key | Type | Requires | Game field | Notes |$nl") + [void]$sb.Append("|---|---|---|---|---|$nl") + + foreach ($f in $Fields) { + $requires = '' + switch ($f.kind) { + 'scalar' { $requires = '`' + $f.guard + '=true`' } + 'namearray' { + if ($f.Contains('replaceOnly') -and $f.replaceOnly) { $requires = 'non-empty *(replace-only)*' } + else { $requires = '`' + $f.modeField + '`' } + } + 'nested' { + if ($f.Contains('modeField') -and $f.modeField) { $requires = '`' + $f.modeField + '`' } + else { $requires = '—' } + } + } + + $gameField = '' + if ($f.gameField) { $gameField = '`' + $f.gameField + '`' } + + $notes = ConvertTo-CellText $f.description + if ($f.inheritedFrom) { + $inh = "*(shared — from ``$($f.inheritedFrom)``)*" + if ($notes) { $notes = "$notes $inh" } else { $notes = $inh } + } + if ($f.kind -eq 'nested') { + $nestedType = $f.type -replace 'array<|>', '' + if ($Curated.NestedLinks.ContainsKey($nestedType)) { + $link = "see $($Curated.NestedLinks[$nestedType])" + } + else { + $link = "see [``$nestedType``](#nested-structs)" + } + if ($notes) { $notes = "$notes — $link" } else { $notes = $link } + } + + [void]$sb.Append("| ``$($f.config)`` | ``$($f.type)`` | $requires | $gameField | $notes |$nl") + } + + return $sb.ToString() +} + +function Format-StructTable { + param([string] $StructName) + + $sb = [System.Text.StringBuilder]::new() + [void]$sb.Append("| Config key | Type | Requires | Notes |$nl") + [void]$sb.Append("|---|---|---|---|$nl") + + foreach ($f in $Structs[$StructName]) { + if ($f.Kind -eq 'guard' -or $f.Kind -eq 'mode') { continue } + + $requires = '—' + if ($f.Kind -eq 'optionalScalar') { $requires = '`' + $f.Guard + '=true`' } + if ($f.ModeField) { $requires = '`' + $f.ModeField + '`' } + + $desc = $f.Description + $key = "$StructName.$($f.Name)" + if ($Curated.StructuralFieldNotes.ContainsKey($key)) { $desc = $Curated.StructuralFieldNotes[$key] } + + [void]$sb.Append("| ``$($f.Name)`` | ``$($f.Type)`` | $requires | $(ConvertTo-CellText $desc) |$nl") + } + + return $sb.ToString() +} + +# ---- summary block ---- +$summary = [System.Text.StringBuilder]::new() +[void]$summary.Append("An ``+AbilityEdits`` entry can change:$nl$nl") + +$templateList = ($TemplateFields | ForEach-Object { '`' + $_.Config + '`' }) -join ', ' +[void]$summary.Append("- **Ability template fields** — $templateList$nl") + +foreach ($fam in $FamilyModels) { + $classes = @($fam.editors | Where-Object { -not $_.catchAll } | ForEach-Object { '`' + $_.gameClass + '`' }) + $classList = $classes -join ', ' + if ($fam.editors | Where-Object { $_.catchAll }) { $classList += ' — plus shared fields on any other subclass' } + + $status = '' + if (-not $fam.wired) { $status = ' ⚠️ **not yet functional** (work in progress)' } + + $keyLabel = '' + if ($fam.configKey) { $keyLabel = " (``$($fam.configKey)``)" } + + [void]$summary.Append("- **$($fam.name)**$keyLabel$status — $classList$nl") +} +$summaryMd = $summary.ToString() + +# ---- enums block ---- +$enumsBuilder = [System.Text.StringBuilder]::new() +foreach ($e in $schemaEnums) { + [void]$enumsBuilder.Append("#### ``$($e.name)``$nl$nl") + [void]$enumsBuilder.Append("| Value | Meaning |$nl|---|---|$nl") + foreach ($v in $e.values) { + $d = $v.description + if (-not $d) { $d = '—' } + [void]$enumsBuilder.Append("| ``$($v.name)`` | $(ConvertTo-CellText $d) |$nl") + } + [void]$enumsBuilder.Append($nl) +} +$enumsMd = $enumsBuilder.ToString() + +# ---- reference block ---- +$reference = [System.Text.StringBuilder]::new() + +[void]$reference.Append("### Template fields$nl$nl") +[void]$reference.Append("Applied directly to the ``X2AbilityTemplate``.$nl$nl") +[void]$reference.Append("| Config key | Requires | Game field |$nl|---|---|---|$nl") +[void]$reference.Append("| ``Ability`` | required | template lookup (``FindAbilityTemplate``) |$nl") +foreach ($t in $schemaTemplate) { + $requires = '' + if ($t.kind -eq 'scalar') { $requires = '`' + $t.guard + '=true`' } + if ($t.kind -eq 'namearray') { $requires = '`' + $t.modeField + '`' } + [void]$reference.Append("| ``$($t.config)`` | $requires | ``$($t.gameField)`` |$nl") +} +[void]$reference.Append("| ``AbilityEventListenerEdits`` | ``EventID`` match | ``AbilityEventListeners`` — edit-existing-only, see [``AbilityEventListenerEdit``](#nested-structs) |$nl") + +if ($TemplateNotEditable.Count -gt 0) { + [void]$reference.Append($nl) + [void]$reference.Append("
Template fields not editable via config ($($TemplateNotEditable.Count))$nl$nl") + [void]$reference.Append((($TemplateNotEditable | ForEach-Object { '`' + $_.name + '` *(' + $_.reason + ')*' }) -join ', ') + $nl) + [void]$reference.Append($nl + "
$nl") +} +[void]$reference.Append($nl) + +foreach ($fam in $FamilyModels) { + if ($fam.configKey) { + [void]$reference.Append("### $($fam.name) (``$($fam.configKey)``)$nl$nl") + } + else { + [void]$reference.Append("### $($fam.name)$nl$nl") + } + if (-not $fam.wired) { + [void]$reference.Append("> ⚠️ **Not yet functional.** This section documents the upcoming release; these entries are currently ignored by the mod.$nl$nl") + } + [void]$reference.Append("$($fam.intro)$nl$nl") + + # structural (plain / mode-less) fields of the family struct that are not covered by editor tables + [void]$reference.Append("Structural fields:$nl$nl") + $sb = [System.Text.StringBuilder]::new() + [void]$sb.Append("| Config key | Type | Notes |$nl|---|---|---|$nl") + foreach ($f in $Structs[$fam.editStruct]) { + if ($f.Kind -ne 'plain' -and $f.Name -ne 'CustomProperties') { continue } + $desc = $f.Description + $key = "$($fam.editStruct).$($f.Name)" + if ($Curated.StructuralFieldNotes.ContainsKey($key)) { $desc = $Curated.StructuralFieldNotes[$key] } + [void]$sb.Append("| ``$($f.Name)`` | ``$($f.Type)`` | $(ConvertTo-CellText $desc) |$nl") + } + [void]$reference.Append($sb.ToString()) + [void]$reference.Append($nl) + + $dispatch = @($fam.editors | ForEach-Object { if ($_.catchAll) { 'any other class' } else { '`' + $_.gameClass + '`' } }) + [void]$reference.Append("Editor dispatch order (first match wins): " + ($dispatch -join ' → ') + "$nl$nl") + + # Base fields are defined on the family root, so they are identical for every editor: render once. + $firstEditor = $fam.editors | Select-Object -First 1 + $familyShared = @() + if ($firstEditor) { + # inheritedFrom is redundant inside the family-wide shared table; suppress it there + $familyShared = @($firstEditor.fields | Where-Object { $_.origin -eq 'base' } | ForEach-Object { + $copy = [ordered]@{} + foreach ($k in $_.Keys) { $copy[$k] = $_[$k] } + $copy.inheritedFrom = $null + $copy + }) + } + if ($familyShared.Count -gt 0) { + [void]$reference.Append("Shared fields (available for **every** class of this family):$nl$nl") + [void]$reference.Append((Format-FieldTable $familyShared) + $nl) + } + + foreach ($ed in $fam.editors) { + if ($ed.catchAll) { + [void]$reference.Append("#### Any other class$nl$nl") + [void]$reference.Append("Handled by ``$($ed.class)``: only the shared fields above apply.$nl$nl") + continue + } + + [void]$reference.Append("#### ``$($ed.gameClass)``$nl$nl") + if ($ed.Contains('abstract') -and $ed.abstract) { + [void]$reference.Append("*Abstract class — existing instances (of its subclasses) can be edited in place, but it cannot be added as a new instance from config.*$nl$nl") + } + + $derived = @($ed.fields | Where-Object { $_.origin -eq 'derived' }) + if ($derived.Count -gt 0) { + [void]$reference.Append((Format-FieldTable $derived) + $nl) + } + else { + [void]$reference.Append("No class-specific fields; the shared fields above apply.$nl$nl") + } + + if ($ed.Contains('notEditable') -and $ed.notEditable.Count -gt 0) { + [void]$reference.Append("Not editable via config: " + (($ed.notEditable | ForEach-Object { '`' + $_.name + '` *(' + $_.reason + ')*' }) -join ', ') + "$nl$nl") + } + } +} + +[void]$reference.Append("### Nested structs$nl$nl") +foreach ($nested in @('AdditionalCooldownEdit', 'BonusChargeEdit', 'StatChangeEdit', 'WeaponDamageValueEdit', 'AbilityEventListenerEdit', 'AECustomProperty')) { + [void]$reference.Append("#### ``$nested``$nl$nl") + [void]$reference.Append((Format-StructTable $nested) + $nl) +} +$referenceMd = $reference.ToString() + +#endregion + +#region 7. Write outputs + +if (-not (Test-Path $DocsDir)) { $null = New-Item -ItemType Directory -Path $DocsDir } + +$GeneratedBlocks = [ordered]@{ + 'summary' = $summaryMd + 'enums' = $enumsMd + 'reference' = $referenceMd +} + +$stale = $false + +# schema.json +$existingSchema = '' +if (Test-Path $SchemaPath) { $existingSchema = [System.IO.File]::ReadAllText($SchemaPath) } +if ($existingSchema -ne $schemaJson) { + if ($CheckOnly) { + $stale = $true + Write-Information 'STALE: docs/schema.json differs.' + } + else { + [System.IO.File]::WriteAllText($SchemaPath, $schemaJson) + Write-Information "Wrote $SchemaPath" + } +} +else { + Write-Information 'docs/schema.json is up to date.' +} + +# README blocks +if (-not $SchemaOnly) { + if (-not (Test-Path $ReadmePath)) { + throw "README.md not found at $ReadmePath. Create the scaffold (with generated-block markers) first." + } + + $readme = [System.IO.File]::ReadAllText($ReadmePath) + $newlineStyle = "`n" + if ($readme -match "`r`n") { $newlineStyle = "`r`n" } + + $updated = $readme + foreach ($blockName in $GeneratedBlocks.Keys) { + $begin = "" + $end = "" + if ($updated.IndexOf($begin) -lt 0 -or $updated.IndexOf($end) -lt 0) { + throw "README.md is missing markers for block '$blockName' ($begin ... $end)." + } + + $content = $GeneratedBlocks[$blockName] + if ($newlineStyle -ne "`n") { $content = $content -replace "`n", $newlineStyle } + + $startIdx = $updated.IndexOf($begin) + $endIdx = $updated.IndexOf($end, $startIdx) + $replacement = $begin + $newlineStyle + $content.TrimEnd() + $newlineStyle + $updated = $updated.Substring(0, $startIdx) + $replacement + $updated.Substring($endIdx) + } + + if ($updated -ne $readme) { + if ($CheckOnly) { + $stale = $true + Write-Information 'STALE: README.md generated blocks differ.' + } + else { + [System.IO.File]::WriteAllText($ReadmePath, $updated) + Write-Information "Updated generated blocks in $ReadmePath" + } + } + else { + Write-Information 'README.md generated blocks are up to date.' + } +} + +#endregion + +#region 8. Report + +Write-Information '' +Write-Information ('Families: ' + (($FamilyModels | ForEach-Object { "$($_.name)=$(@($_.editors).Count) editors (wired: $($_.wired))" }) -join '; ')) + +if ($Warnings.Count -gt 0) { + Write-Information '' + Write-Information "Warnings ($($Warnings.Count)):" + foreach ($w in $Warnings) { Write-Information " - $w" } +} + +#endregion + +if ($CheckOnly -and $stale) { exit 1 } +exit 0 diff --git a/AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc b/AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc index 4abcfb9..b37a9b9 100644 --- a/AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc +++ b/AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc @@ -1955,9 +1955,12 @@ struct AbilityEdit var name Ability; var bool SetHostility; + // Whether the ability is offensive, defensive or neutral. Drives AI targeting and the + // reticle colour. One of eHostility_Offensive, eHostility_Defensive, eHostility_Neutral. var EAbilityHostility Hostility; var bool SetConcealmentRule; + // What happens to the shooter's concealment when the ability is used. var EConcealmentRule ConcealmentRule; var array AdditionalAbilities; diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..e041b50 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,142 @@ +# Changelog + +All notable changes to **Ability Editor** are documented here. The mod lets you retune +XCOM 2 (War of the Chosen) abilities entirely from `.ini` config — no scripting, no +rebuilds. See the [README](README.md) for the full field reference. + +This project follows [Keep a Changelog](https://keepachangelog.com/) and +[Semantic Versioning](https://semver.org/). + +## [Unreleased] + +### Fixed + +- **Replace-only array fields no longer advertise a mode field that doesn't exist.** The reference + tables listed `HitModifiersMode` and `EffectHitModifiersMode` in the "Requires" column for + `ToHitCalcEdit.HitModifiers` and `EffectEdit.EffectHitModifiers`. Neither field exists — both + arrays are replace-only — so anyone who wrote them was silently ignored. They now render as + "non-empty *(replace-only)*". This affected 11 entries in `docs/schema.json` too, so any tooling + consuming the schema inherited the same wrong information. + +### Added + +- Ability template fields in `docs/schema.json` now carry `type` and `description`. Previously all + 46 had neither, and consumers had to join against the `AbilityEdit` struct to recover the type. +- `generate-docs.ps1 -PrintSourceHash` prints the hash of the UnrealScript sources and exits. It + needs no SDK, so CI can compare it against `sourceHash` in the committed schema to catch a + forgotten regeneration. + +### Documentation + +- Documented that building the mod requires Community Highlander-patched SDK sources + ([Issue #68](https://github.com/X2CommunityCore/X2WOTCCommunityHighlander/issues/68) removes + `protectedwrite` from the three `X2AbilityTemplate` effect arrays this mod writes). This is a + build-time requirement only — the compiled mod runs against vanilla `XComGame`. +- Corrected the field-documentation convention: a `//` comment must sit directly above the **value** + var, not above the `Set`/value pair. A comment above the pair attaches to the guard and is + dropped, which is why 219 existing comments act as section headers rather than field docs. + +## [2.0.0] - 2026-07-10 + +A ground-up rewrite. The old options still work, but there's now a single, consistent +`+AbilityEdits` config that can reach almost every part of an ability. + +### Added + +- **New unified config API.** Edit any ability by adding an `+AbilityEdits=(...)` entry + under `[AbilityEditor.X2DLCInfo_AbilityEditor]` in `XComAbilityEditor.ini`. One entry can + change as much or as little of an ability as you like. + +- **Costs** — action points, ammo, charges, focus, "consume item", and the special + reserve/heavy-weapon/quickdraw action-point costs. Add, remove, or tweak them per ability. + ```ini + ; Let Ranger's Slash keep the turn going (1 point, don't end turn) for Blademaster users + +AbilityEdits=( \\ + Ability=SwordSlice, \\ + Costs=( \\ + ( Class="X2AbilityCost_ActionPoints", SetNumPoints=true, NumPoints=1, \\ + SetConsumeAllPoints=true, ConsumeAllPoints=false ) \\ + ) \\ + ) + ``` + +- **Cooldowns & charges** — set turn cooldowns (including separate XCOM/AI values and + shared cooldowns with other abilities), initial charges, and bonus charges granted by + other abilities. + +- **Effects** — change what an ability actually *does*: weapon damage, stat changes, + stuns, armor, damage immunities, action-point grants, effect removal, covering fire, + and dozens more. Every applicable in-game effect type is supported. + +- **Conditions** — control *who and when* an ability can affect: unit type, health, + cover, range, alert status, active effects, inventory, visibility, and more. Attach + them to the ability or to an individual effect. + ```ini + ; Make Combat Protocol only target robotic units + +AbilityEdits=( \\ + Ability=CombatProtocol, \\ + TargetConditions=( \\ + ( Class="X2Condition_UnitProperty", Mode=eAEM_Merge, \\ + SetExcludeOrganic=true, ExcludeOrganic=true ) \\ + ) \\ + ) + ``` + +- **Aim & hit chance** — edit an ability's to-hit calculation: built-in aim/crit + modifiers, guaranteed hits, flat percent-to-hit, stat rolls, and more. + +- **Targeting shape** — change how an ability picks targets: single-target rules, cursor + range, moving-melee reach, and area shapes (radius, cone, line, cylinder, burst, all-units). + +- **Triggers** — change what makes an ability fire (e.g. passive on spawn, event-driven). + +- **Ability template settings** — hostility, concealment rules, cross-class eligibility, + passive/unique flags, HUD icon and color, tooltip/summary visibility, point cost, default + item slot, friendly-fire warnings, added/prerequisite/override abilities, and more. + +- **Flexible list editing.** Wherever an ability has a list (costs, effects, conditions, + damage types, ability names…), you choose how your entry combines with what's already + there: **replace all**, **merge**, **add-only**, or **remove**. + +- **Documentation.** A complete, always-up-to-date field reference in the + [README](README.md), generated directly from the mod's code, plus a machine-readable + `docs/schema.json` for tooling. + +### Changed + +- **Edit in place by default.** Ability Editor now changes only the fields you set and + leaves everything else intact. For the single-object slots (cooldown, charges, to-hit, + targeting), omit `Class` to tweak whatever the ability already uses, or set `Class` to + swap in a different one. +- The legacy options are unchanged and continue to work (see below), so existing configs + keep functioning. + +### Fixed + +- Removing an ability's charges now works correctly. +- Stat-change and duration effects (e.g. Persistent-based effects) now apply all of their + settings as expected. +- Per-player-type cooldowns (separate XCOM/AI turns) now apply correctly. + +### For mod authors + +- **Extensible by other mods.** Bridge mods can register their own editor classes to + support abilities from DLC or other mods, without Ability Editor needing to know about + them. Add your editor class via `+ExtraEffectsEditors=(EditorClass="...", Priority=N)` + (and the equivalents for costs, cooldowns, charges, conditions, to-hit, targeting, and + triggers). Details in the README's "Extending Ability Editor" section. + +### Notes + +- After changing config, clear the game's config cache (delete + `Documents\My Games\XCOM2 War of the Chosen\XComGame\Config`) so your edits are picked up. +- Turn on `EnableDebug=true` under `[AbilityEditor.X2DLCInfo_AbilityEditor]` to log every + change the mod makes to `Launch.log` (tag `AbilityEditor`). + +## [1.x] - Earlier releases + +The original configuration lived under `[AbilityEditor.OPTC_Abilities]` and supported a +fixed set of per-ability tweaks: ammo cost, cooldown, action-point cost, ends-turn/free-action, +consume-item, charges (and keep-on-miss), shared charges/cooldowns, added/prerequisite/override +abilities, bonus charges, focus cost options, item slot, concealment rule, and cross-class +eligibility. These options still work in 2.0. diff --git a/README.md b/README.md index cc0c85f..e4c6de3 100644 --- a/README.md +++ b/README.md @@ -3620,7 +3620,7 @@ Not editable via config: `TargetingIcon` *(type `Texture2D`)* | Config key | Type | Requires | Game field | Notes | |---|---|---|---|---| | `ApplyAsTarget` | `bool` | `SetApplyAsTarget=true` | `bApplyAsTarget` | | -| `EffectHitModifiers` | `array` | `EffectHitModifiersMode` | `Modifiers` | X2Effect_ToHitModifier: replace-only — when non-empty, replaces Modifiers entirely | +| `EffectHitModifiers` | `array` | non-empty *(replace-only)* | `Modifiers` | X2Effect_ToHitModifier: replace-only — when non-empty, replaces Modifiers entirely | | `ToHitConditions` | `array` | — | | X2Effect_ToHitModifier — see [Conditions](#conditions) | | `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | | `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | @@ -4433,7 +4433,7 @@ Shared fields (available for **every** class of this family): | Config key | Type | Requires | Game field | Notes | |---|---|---|---|---| -| `HitModifiers` | `array` | `HitModifiersMode` | `HitModifiers` | Replace-only: when non-empty, replaces the calc's HitModifiers array entirely | +| `HitModifiers` | `array` | non-empty *(replace-only)* | `HitModifiers` | Replace-only: when non-empty, replaces the calc's HitModifiers array entirely | #### `X2AbilityToHitCalc_StatCheck_UnitVsUnit` @@ -4952,13 +4952,42 @@ For data the shared edit structs don't carry, every `EffectEdit`/`ConditionEdit` ## For developers +### Build prerequisite: Community Highlander sources + +**Building this mod requires an SDK whose `Development/Src` is Community Highlander-patched.** It is +not a requirement for *players* — see below. + +`X2AbilityEffectsEditor_Helper.uc` writes `Template.AbilityTargetEffects`, +`AbilityMultiTargetEffects` and `AbilityShooterEffects`. In stock Firaxis sources those three are +`protectedwrite`, so the writes will not compile. Community Highlander +[Issue #68](https://github.com/X2CommunityCore/X2WOTCCommunityHighlander/issues/68) removes that +modifier (`X2AbilityTemplate.uc`, "Start Issue #68 / End Issue #68"). + +This is a **compile-time** dependency only. Issue #68 changes nothing but the accessibility +modifier — same types, same declaration order, same class layout — and UnrealScript access +modifiers do not affect the compiled property layout, so the resulting `.u` loads and runs against +vanilla `XComGame` as well as the Highlander's. No `RequiredHighlanderVersion` is declared, and none +is needed. + +If you see `Error, Can't write to protected variable` on `AbilityTargetEffects` during a build, your +SDK sources are stock; deploy the Highlander into the SDK. + +### Regenerating the docs + The [Reference](#reference), [Supported at a glance](#supported-at-a-glance) and [Edit modes](#edit-modes) sections above are **generated** from the UnrealScript sources. After adding or changing an editor class, regenerate them with: ```powershell -.\.scripts\generate-docs.ps1 # updates README.md and docs/schema.json -.\.scripts\generate-docs.ps1 -CheckOnly # exits 1 if the docs are stale (for CI) +.\.scripts\generate-docs.ps1 -SdkPath '' # updates README.md and docs/schema.json +.\.scripts\generate-docs.ps1 -CheckOnly # exits 1 if the docs are stale +.\.scripts\generate-docs.ps1 -PrintSourceHash # prints the .uc source hash and exits ``` +Always pass `-SdkPath`: without it the generator silently skips abstract-class badges, the +per-class "not editable via config" lists, and the **dispatch-order check** — the only automated +guard against registering an editor after one of its game class's ancestors, which makes it dead +code. `-PrintSourceHash` is the CI-friendly staleness check: it needs no SDK, so CI can compare it +against `sourceHash` in the committed `docs/schema.json`. + The script also emits [`docs/schema.json`](docs/schema.json), a machine-readable description of the whole config API (enums, structs, families, editors, fields), meant to be consumed by external tooling such as a config-builder web app. For the docs to pick up a new editor class automatically, follow the existing conventions: @@ -4966,6 +4995,12 @@ For the docs to pick up a new editor class automatically, follow the existing co 1. Declare the handled game class with a single `IsA('X2Thing_Class')` in `CanEdit()`. 2. Apply optional scalars with the `if (Edit.SetX) { LogInfo(...); Target.Field = Edit.X; }` triplet, and name arrays through `X2AbilityEditor_Helper.ApplyNameArrayEdit`. 3. Register the class in the family's registry in `X2DLCInfo_AbilityEditor.uc` `defaultproperties` — **before** any editor whose game class is a parent of yours (first match wins). -4. Declare new config fields in `AE_DataStructures.uc` as `Set`/value pairs (with a `// comment` above the pair: it becomes the field's documentation). +4. Declare new config fields in `AE_DataStructures.uc` as `Set`/value pairs. To document a field, put the `// comment` **directly above the value var, not above the `Set` guard** — the parser attaches a comment to the next `var` it sees, and guards are not documented fields, so a comment above the pair is dropped. Comments above a guard are therefore free to act as section headers (`// X2Condition_UnitValue`), which is how the file already uses them. + + ```unrealscript + var bool SetNumAmmo; + // Rounds consumed per shot. 0 makes the ability free to fire. + var int NumAmmo; + ``` Everything hand-written in this file lives outside the `` markers and survives regeneration. diff --git a/docs/schema.json b/docs/schema.json new file mode 100644 index 0000000..831f81f --- /dev/null +++ b/docs/schema.json @@ -0,0 +1,63251 @@ +{ + "$comment": "Generated by .scripts/generate-docs.ps1 - do not edit by hand.", + "sourceHash": "4c1e871da9a4143c8c91044046b77d37a79788b7463ed01f5ca52f1ec3bce02d", + "enums": [ + { + "name": "EStatChangeMode", + "values": [ + { + "name": "eSCM_Replace", + "description": "Clear existing stat changes (`m_aStatChanges`) before applying yours. (Default)" + }, + { + "name": "eSCM_Merge", + "description": "Update the entry for each `StatType` if present, otherwise add it." + } + ] + }, + { + "name": "EAbilityEffectSlot", + "values": [ + { + "name": "eAES_Target", + "description": "Edit `AbilityTargetEffects` (effects applied to the primary target). (Default)" + }, + { + "name": "eAES_MultiTarget", + "description": "Edit `AbilityMultiTargetEffects`." + }, + { + "name": "eAES_Shooter", + "description": "Edit `AbilityShooterEffects` (effects applied to the shooter)." + } + ] + }, + { + "name": "EChargesBonusMode", + "values": [ + { + "name": "eCBM_Replace", + "description": "Clear existing `BonusCharges` entries before applying yours. (Default)" + }, + { + "name": "eCBM_Merge", + "description": "Update the entry for each `AbilityName` if present, otherwise add it." + } + ] + }, + { + "name": "EAdditionalCooldownEditMode", + "values": [ + { + "name": "eACEM_Replace", + "description": "Clear existing `AditionalAbilityCooldowns` entries before applying yours. (Default)" + }, + { + "name": "eACEM_Merge", + "description": "Update the entry for each `AbilityName` if present, otherwise add it." + } + ] + }, + { + "name": "EAbilityCostEditMode", + "values": [ + { + "name": "eACEM_ReplaceAll", + "description": "As `CostMode`: clear **all** existing costs before applying the entries. As per-entry `Mode`: edit in place if a cost of that class exists, otherwise skip (unless `CostMode=eACEM_ReplaceAll`, in which case a new cost is added). (Default)" + }, + { + "name": "eACEM_Merge", + "description": "Edit the existing cost of that class in place; if none exists, instantiate and add it." + }, + { + "name": "eACEM_AddOnly", + "description": "Same as `eACEM_Merge`: edit in place if present, otherwise add." + }, + { + "name": "eACEM_Remove", + "description": "Remove the cost of that class from the ability." + } + ] + }, + { + "name": "EArrayEditMode", + "values": [ + { + "name": "eAEM_ReplaceAll", + "description": "Clear the whole target array, then add this effect/condition. (Default)" + }, + { + "name": "eAEM_Merge", + "description": "Edit the existing effect/condition of that class in place; if none exists, instantiate and add it." + }, + { + "name": "eAEM_AddOnly", + "description": "Same as `eAEM_Merge`: edit in place if present, otherwise add." + }, + { + "name": "eAEM_Remove", + "description": "Remove the first effect/condition of that class from the target array." + } + ] + }, + { + "name": "ENameArrayEditMode", + "values": [ + { + "name": "eNAEM_Replace", + "description": "Replace the whole target array with the provided values. (Default)" + }, + { + "name": "eNAEM_Merge", + "description": "Append each provided value that is not already present." + }, + { + "name": "eNAEM_AddOnly", + "description": "Set the provided values **only if the target array is currently empty**; otherwise do nothing. It does not append." + }, + { + "name": "eNAEM_Remove", + "description": "Remove each provided value from the target array." + } + ] + } + ], + "structs": [ + { + "name": "AdditionalCooldownEdit", + "fields": [ + { + "name": "AbilityName", + "type": "name", + "kind": "plain", + "description": "Ability whose cooldown entry is added/updated in `AditionalAbilityCooldowns`." + }, + { + "name": "NumTurns", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumTurns" + }, + { + "name": "UseAbilityCooldownNumTurns", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseAbilityCooldownNumTurns" + }, + { + "name": "ApplyCooldownType", + "type": "name", + "kind": "plain", + "description": "`AdditionalCooldown_ApplyLarger` or `AdditionalCooldown_ApplySmaller`. Applied when non-empty." + } + ] + }, + { + "name": "BonusChargeEdit", + "fields": [ + { + "name": "AbilityName", + "type": "name", + "kind": "plain", + "description": "Ability that grants the bonus charges." + }, + { + "name": "NumCharges", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumCharges" + } + ] + }, + { + "name": "CostEdit", + "fields": [ + { + "name": "Class", + "type": "string", + "kind": "plain", + "description": "Cost class to target/instantiate, e.g. `X2AbilityCost_ActionPoints`. Bare names are auto-prefixed with `XComGame.`; empty falls back to `X2AbilityCost`." + }, + { + "name": "Mode", + "type": "EAbilityCostEditMode", + "kind": "plain", + "description": "Per-entry edit mode (`EAbilityCostEditMode`), see [Edit modes](#edit-modes)." + }, + { + "name": "FreeCost", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetFreeCost" + }, + { + "name": "NumPoints", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumPoints" + }, + { + "name": "AddWeaponTypicalCost", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAddWeaponTypicalCost" + }, + { + "name": "ConsumeAllPoints", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetConsumeAllPoints" + }, + { + "name": "MoveCost", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetMoveCost" + }, + { + "name": "AllowedTypes", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AllowedTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "AllowedTypesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "DoNotConsumeAllEffects", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "DoNotConsumeAllEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "DoNotConsumeAllEffectsMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "DoNotConsumeAllSoldierAbilities", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "DoNotConsumeAllSoldierAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "DoNotConsumeAllSoldierAbilitiesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "SharedAbilityCharges", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "SharedAbilityChargesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "SharedAbilityChargesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "FocusAmount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetFocusAmount" + }, + { + "name": "ConsumeAllFocus", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetConsumeAllFocus" + }, + { + "name": "GhostOnlyCost", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetGhostOnlyCost" + }, + { + "name": "NumAmmo", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumAmmo" + }, + { + "name": "UseLoadedAmmo", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseLoadedAmmo" + }, + { + "name": "ReturnChargesError", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetReturnChargesError" + }, + { + "name": "ConsumeAllAmmo", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetConsumeAllAmmo" + }, + { + "name": "NumCharges", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumCharges" + }, + { + "name": "OnlyOnHit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyOnHit" + }, + { + "name": "AlsoExpendChargesOnSharedBondmateAbility", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAlsoExpendChargesOnSharedBondmateAbility" + } + ] + }, + { + "name": "CooldownEdit", + "fields": [ + { + "name": "Class", + "type": "string", + "kind": "plain", + "description": "Optional. Omitted = edit the existing cooldown in place. Set = target/instantiate that class, e.g. `X2AbilityCooldown_PerPlayerType`. Bare names are auto-prefixed with `XComGame.`." + }, + { + "name": "NumTurns", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumTurns" + }, + { + "name": "IgnoreOnHit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIgnoreOnHit" + }, + { + "name": "AdditionalCooldownMode", + "type": "EAdditionalCooldownEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "AdditionalCooldowns", + "type": "array", + "kind": "nested", + "description": "", + "modeField": "AdditionalCooldownMode", + "modeEnum": "EAdditionalCooldownEditMode" + }, + { + "name": "NumTurnsForAI", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumTurnsForAI" + }, + { + "name": "NumGlobalTurns", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumGlobalTurns" + } + ] + }, + { + "name": "ChargesEdit", + "fields": [ + { + "name": "Class", + "type": "string", + "kind": "plain", + "description": "Optional. Omitted = edit the existing charges object in place. Set = target/instantiate that class, e.g. `X2AbilityCharges_GremlinHeal`. Bare names are auto-prefixed with `XComGame.`." + }, + { + "name": "InitialCharges", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetInitialCharges" + }, + { + "name": "BonusChargesMode", + "type": "EChargesBonusMode", + "kind": "mode", + "description": "" + }, + { + "name": "BonusCharges", + "type": "array", + "kind": "nested", + "description": "", + "modeField": "BonusChargesMode", + "modeEnum": "EChargesBonusMode" + }, + { + "name": "RemoveCharges", + "type": "bool", + "kind": "plain", + "description": "Set to true to remove the ability's charges object entirely. No `Class` needed; the other fields of the block are ignored." + }, + { + "name": "Stabilize", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetStabilize" + } + ] + }, + { + "name": "AECustomProperty", + "fields": [ + { + "name": "Key", + "type": "name", + "kind": "plain", + "description": "" + }, + { + "name": "Value", + "type": "string", + "kind": "plain", + "description": "" + } + ] + }, + { + "name": "ConditionEdit", + "fields": [ + { + "name": "Class", + "type": "string", + "kind": "plain", + "description": "Condition class to target/instantiate, e.g. `X2Condition_UnitProperty`. Bare names are auto-prefixed with `XComGame.`." + }, + { + "name": "Mode", + "type": "EArrayEditMode", + "kind": "plain", + "description": "Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes)." + }, + { + "name": "OwnerHasSoldierAbilitiesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Condition_AbilityProperty" + }, + { + "name": "OwnerHasSoldierAbilities", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "OwnerHasSoldierAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "TargetMustBeInValidTiles", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetTargetMustBeInValidTiles" + }, + { + "name": "WantsReload", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetWantsReload" + }, + { + "name": "CheckAmmo", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCheckAmmo" + }, + { + "name": "CheckAmmoData", + "type": "CheckConfig", + "kind": "optionalScalar", + "description": "", + "guard": "SetCheckAmmoData" + }, + { + "name": "NotLoadedAmmoInSecondaryWeapon", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetNotLoadedAmmoInSecondaryWeapon" + }, + { + "name": "MatchGrenadeType", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetMatchGrenadeType" + }, + { + "name": "CheckGrenadeFriendlyFire", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCheckGrenadeFriendlyFire" + }, + { + "name": "CheckAmmoTechLevel", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCheckAmmoTechLevel" + }, + { + "name": "MatchWeaponTemplate", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetMatchWeaponTemplate" + }, + { + "name": "StilettoRounds", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetStilettoRounds" + }, + { + "name": "RequiredGameplayTag", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequiredGameplayTag" + }, + { + "name": "DisallowGameplayTag", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetDisallowGameplayTag" + }, + { + "name": "NumTurnsCheck", + "type": "CheckConfig", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumTurnsCheck" + }, + { + "name": "ActionPointChecksMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Condition_UnitActionPoints (merged by ActionPointType)" + }, + { + "name": "ActionPointChecks", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "ActionPointChecksMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "RequiredAlertStatusMaximum", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequiredAlertStatusMaximum" + }, + { + "name": "RequiredAlertStatusMinimum", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequiredAlertStatusMinimum" + }, + { + "name": "ExcludeEffectsMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Condition_UnitEffects and its subclasses (merged by EffectName)" + }, + { + "name": "ExcludeEffects", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "ExcludeEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "RequireEffectsMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "RequireEffects", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "RequireEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ExcludeDamageTypesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Condition_UnitImmunities" + }, + { + "name": "ExcludeDamageTypes", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "ExcludeDamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "OnlyOnCharacterTemplate", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyOnCharacterTemplate" + }, + { + "name": "InteractionType", + "type": "UnitInterationType", + "kind": "optionalScalar", + "description": "", + "guard": "SetInteractionType" + }, + { + "name": "RelevantSlot", + "type": "EInventorySlot", + "kind": "optionalScalar", + "description": "", + "guard": "SetRelevantSlot" + }, + { + "name": "ExcludeWeaponCategory", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeWeaponCategory" + }, + { + "name": "RequireWeaponCategory", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireWeaponCategory" + }, + { + "name": "ExcludeAlive", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeAlive" + }, + { + "name": "ExcludeDead", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeDead" + }, + { + "name": "ExcludeRobotic", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeRobotic" + }, + { + "name": "ExcludeOrganic", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeOrganic" + }, + { + "name": "ExcludeCivilian", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeCivilian" + }, + { + "name": "ExcludeNonCivilian", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeNonCivilian" + }, + { + "name": "ExcludeCosmetic", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeCosmetic" + }, + { + "name": "ExcludeImpaired", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeImpaired" + }, + { + "name": "ExcludePanicked", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludePanicked" + }, + { + "name": "ExcludeInStasis", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeInStasis" + }, + { + "name": "ExcludeTurret", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeTurret" + }, + { + "name": "ExcludePsionic", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludePsionic" + }, + { + "name": "ExcludeNonPsionic", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeNonPsionic" + }, + { + "name": "IsAdvent", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsAdvent" + }, + { + "name": "ExcludeAdvent", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeAdvent" + }, + { + "name": "ExcludeNoCover", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeNoCover" + }, + { + "name": "ExcludeNoCoverToSource", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeNoCoverToSource" + }, + { + "name": "ExcludeFullHealth", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeFullHealth" + }, + { + "name": "IsBleedingOut", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsBleedingOut" + }, + { + "name": "IsUnspotted", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsUnspotted" + }, + { + "name": "CanBeCarried", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCanBeCarried" + }, + { + "name": "IsOutdoors", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsOutdoors" + }, + { + "name": "IsConcealed", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsConcealed" + }, + { + "name": "ExcludeConcealed", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeConcealed" + }, + { + "name": "IsSuperConcealed", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsSuperConcealed" + }, + { + "name": "IsImpaired", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsImpaired" + }, + { + "name": "HasClearanceToMaxZ", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetHasClearanceToMaxZ" + }, + { + "name": "ExcludeAlien", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeAlien" + }, + { + "name": "ExcludeNonHumanoidAliens", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeNonHumanoidAliens" + }, + { + "name": "ExcludeStunned", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeStunned" + }, + { + "name": "ExcludeDazed", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeDazed" + }, + { + "name": "ExcludeUnableToAct", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeUnableToAct" + }, + { + "name": "IsPlayerControlled", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsPlayerControlled" + }, + { + "name": "ExcludeUnrevealedAI", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeUnrevealedAI" + }, + { + "name": "IncludeWeakAgainstTechLikeRobot", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIncludeWeakAgainstTechLikeRobot" + }, + { + "name": "ImpairedIgnoresStuns", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetImpairedIgnoresStuns" + }, + { + "name": "IsScampering", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsScampering" + }, + { + "name": "ExcludeDeadFromSpecialDeath", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeDeadFromSpecialDeath" + }, + { + "name": "ExcludeLargeUnits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeLargeUnits" + }, + { + "name": "ImpairedIgnoresImpairingMomentarily", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetImpairedIgnoresImpairingMomentarily" + }, + { + "name": "MinRank", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMinRank" + }, + { + "name": "MaxRank", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMaxRank" + }, + { + "name": "ExcludeSoldierClassesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "ExcludeSoldierClasses", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "ExcludeSoldierClassesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "RequireSoldierClassesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "RequireSoldierClasses", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "RequireSoldierClassesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ExcludeHostileToSource", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeHostileToSource" + }, + { + "name": "ExcludeFriendlyToSource", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeFriendlyToSource" + }, + { + "name": "TreatMindControlledSquadmateAsHostile", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetTreatMindControlledSquadmateAsHostile" + }, + { + "name": "ExcludeSquadmates", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeSquadmates" + }, + { + "name": "RequireSquadmates", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireSquadmates" + }, + { + "name": "RequireWithinRange", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireWithinRange" + }, + { + "name": "WithinRange", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetWithinRange" + }, + { + "name": "RequireWithinMinRange", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireWithinMinRange" + }, + { + "name": "WithinMinRange", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetWithinMinRange" + }, + { + "name": "BeingCarriedBySource", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetBeingCarriedBySource" + }, + { + "name": "RequireUnitSelectedFromHQ", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireUnitSelectedFromHQ" + }, + { + "name": "FailOnNonUnits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetFailOnNonUnits" + }, + { + "name": "CheckStatsMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Condition_UnitStatCheck (merged by StatType)" + }, + { + "name": "CheckStats", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "CheckStatsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "IncludeTypesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Condition_UnitType" + }, + { + "name": "IncludeTypes", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "IncludeTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ExcludeTypesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "ExcludeTypes", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "ExcludeTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "CheckValuesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Condition_UnitValue (merged by UnitValue)" + }, + { + "name": "CheckValues", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "CheckValuesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "NoEnemyViewers", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetNoEnemyViewers" + }, + { + "name": "RequireMatchCoverType", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireMatchCoverType" + }, + { + "name": "RequireNotMatchCoverType", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireNotMatchCoverType" + }, + { + "name": "TargetCover", + "type": "ECoverType", + "kind": "optionalScalar", + "description": "", + "guard": "SetTargetCover" + }, + { + "name": "CannotPeek", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCannotPeek" + }, + { + "name": "RequireLOS", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireLOS" + }, + { + "name": "RequireBasicVisibility", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireBasicVisibility" + }, + { + "name": "RequireGameplayVisible", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireGameplayVisible" + }, + { + "name": "AllowSquadsight", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowSquadsight" + }, + { + "name": "ActAsSquadsight", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetActAsSquadsight" + }, + { + "name": "VisibleToAnyAlly", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetVisibleToAnyAlly" + }, + { + "name": "DisablePeeksOnMovement", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDisablePeeksOnMovement" + }, + { + "name": "ExcludeGameplayVisible", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeGameplayVisible" + }, + { + "name": "RequireGameplayVisibleTagsMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "RequireGameplayVisibleTags", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "RequireGameplayVisibleTagsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "MissionAborted", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetMissionAborted" + }, + { + "name": "MissionNotAborted", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetMissionNotAborted" + }, + { + "name": "CiviliansTargetedByAliens", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCiviliansTargetedByAliens" + }, + { + "name": "CiviliansNotTargetedByAliens", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCiviliansNotTargetedByAliens" + }, + { + "name": "IncludeTheLostInEngagedCount", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIncludeTheLostInEngagedCount" + }, + { + "name": "MinEngagedEnemies", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMinEngagedEnemies" + }, + { + "name": "MaxEngagedEnemies", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMaxEngagedEnemies" + }, + { + "name": "FailOnNonUnitTargets", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetFailOnNonUnitTargets" + }, + { + "name": "MinBondLevel", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMinBondLevel" + }, + { + "name": "MaxBondLevel", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMaxBondLevel" + }, + { + "name": "RequiresAdjacency", + "type": "AdjacencyRequirement", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequiresAdjacency" + }, + { + "name": "SkipCheckWithSource", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetSkipCheckWithSource" + }, + { + "name": "IntrusionProtocol", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIntrusionProtocol" + }, + { + "name": "HaywireProtocol", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetHaywireProtocol" + }, + { + "name": "RequiredAbilityName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequiredAbilityName" + }, + { + "name": "MustBeDoor", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetMustBeDoor" + }, + { + "name": "RestrictRange", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRestrictRange" + }, + { + "name": "LootableRange", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetLootableRange" + }, + { + "name": "NotAFloorTileTag", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetNotAFloorTileTag" + }, + { + "name": "MaxPanicUnitsPerPod", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMaxPanicUnitsPerPod" + }, + { + "name": "HackAbilityName", + "type": "Name", + "kind": "optionalScalar", + "description": "", + "guard": "SetHackAbilityName" + }, + { + "name": "CheckFlanking", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCheckFlanking" + }, + { + "name": "RequireVisible", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireVisible" + }, + { + "name": "AllowedBiomesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Condition_MapProperty" + }, + { + "name": "AllowedBiomes", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AllowedBiomesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "CustomProperties", + "type": "array", + "kind": "nested", + "description": "Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors." + } + ] + }, + { + "name": "StatChangeEdit", + "fields": [ + { + "name": "StatType", + "type": "ECharStatType", + "kind": "optionalScalar", + "description": "", + "guard": "SetStatType" + }, + { + "name": "StatAmount", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetStatAmount" + }, + { + "name": "ModOp", + "type": "EStatModOp", + "kind": "optionalScalar", + "description": "", + "guard": "SetModOp" + }, + { + "name": "ApplicationRule", + "type": "ECharStatModApplicationRule", + "kind": "optionalScalar", + "description": "", + "guard": "SetApplicationRule" + } + ] + }, + { + "name": "WeaponDamageValueEdit", + "fields": [ + { + "name": "Damage", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamage" + }, + { + "name": "Spread", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetSpread" + }, + { + "name": "PlusOne", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPlusOne" + }, + { + "name": "Crit", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetCrit" + }, + { + "name": "Pierce", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPierce" + }, + { + "name": "Rupture", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetRupture" + }, + { + "name": "Shred", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetShred" + }, + { + "name": "Tag", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetTag" + }, + { + "name": "DamageType", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamageType" + } + ] + }, + { + "name": "EffectEdit", + "fields": [ + { + "name": "Class", + "type": "string", + "kind": "plain", + "description": "Effect class to target/instantiate, e.g. `X2Effect_ApplyWeaponDamage`. Bare names are auto-prefixed with `XComGame.`; empty falls back to `X2Effect`." + }, + { + "name": "Slot", + "type": "EAbilityEffectSlot", + "kind": "plain", + "description": "Which effect array to edit (`EAbilityEffectSlot`): `eAES_Target`, `eAES_MultiTarget` or `eAES_Shooter`." + }, + { + "name": "Mode", + "type": "EArrayEditMode", + "kind": "plain", + "description": "Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes)." + }, + { + "name": "ApplyOnHit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "name": "ApplyOnMiss", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "name": "ApplyChance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetApplyChance" + }, + { + "name": "ApplyToWorldOnHit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "name": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "name": "UseSourcePlayerState", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "name": "IsImpairing", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsImpairing" + }, + { + "name": "IsImpairingMomentarily", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "name": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "name": "ShowImmunity", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetShowImmunity" + }, + { + "name": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "name": "AppliesDamage", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "name": "CanBeRedirected", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "name": "HideDeathWorldMessage", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "name": "DamageTypesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "DamageTypes", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "TargetConditions", + "type": "array", + "kind": "nested", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "name": "MinStatContestResult", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "name": "MaxStatContestResult", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "name": "DelayVisualizationSec", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "name": "OverrideMissMessage", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "name": "NumTurns", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumTurns" + }, + { + "name": "InitialShedChance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "name": "PerTurnShedChance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "name": "EffectRank", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetEffectRank" + }, + { + "name": "EffectHierarchyValue", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "name": "VisionArcDegreesOverride", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "name": "InfiniteDuration", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "name": "TickWhenApplied", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "name": "CanTickEveryAction", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "name": "ConvertTurnsToActions", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "name": "RemoveWhenSourceDies", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "name": "RemoveWhenTargetDies", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "name": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "name": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "name": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "name": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "name": "UniqueTarget", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "name": "StackOnRefresh", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "name": "DupeForSameSourceOnly", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "name": "EffectForcesBleedout", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "name": "DisplayInUI", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "name": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "name": "SourceDisplayInUI", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "name": "CustomIdleOverrideAnim", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "name": "EffectName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetEffectName" + }, + { + "name": "AbilitySourceName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "name": "EffectAppliedEventName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "name": "ChanceEventTriggerName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "name": "VFXSocket", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetVFXSocket" + }, + { + "name": "VFXSocketsArrayName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "name": "FriendlyName", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetFriendlyName" + }, + { + "name": "FriendlyDescription", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "name": "IconImage", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetIconImage" + }, + { + "name": "SourceFriendlyName", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "name": "SourceFriendlyDescription", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "name": "SourceIconLabel", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "name": "StatusIcon", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetStatusIcon" + }, + { + "name": "VFXTemplateName", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "name": "PersistentPerkName", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetPersistentPerkName" + }, + { + "name": "ExplosiveDamage", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExplosiveDamage" + }, + { + "name": "IgnoreBaseDamage", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIgnoreBaseDamage" + }, + { + "name": "DamageTag", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamageTag" + }, + { + "name": "AlwaysKillsCivilians", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAlwaysKillsCivilians" + }, + { + "name": "ApplyWorldEffectsForEachTargetLocation", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetApplyWorldEffectsForEachTargetLocation" + }, + { + "name": "AllowFreeKill", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowFreeKill" + }, + { + "name": "AllowWeaponUpgrade", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowWeaponUpgrade" + }, + { + "name": "BypassShields", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetBypassShields" + }, + { + "name": "IgnoreArmor", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIgnoreArmor" + }, + { + "name": "BypassSustainEffects", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetBypassSustainEffects" + }, + { + "name": "EnvironmentalDamageAmount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetEnvironmentalDamageAmount" + }, + { + "name": "WeaponDamageValue", + "type": "WeaponDamageValueEdit", + "kind": "nested", + "description": "" + }, + { + "name": "StatChangeMode", + "type": "EStatChangeMode", + "kind": "mode", + "description": "X2Effect_PersistentStatChange" + }, + { + "name": "StatChange", + "type": "array", + "kind": "nested", + "description": "", + "modeField": "StatChangeMode", + "modeEnum": "EStatChangeMode" + }, + { + "name": "CHLForceReapplyOnRefresh", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCHLForceReapplyOnRefresh" + }, + { + "name": "ImmuneTypesAreInclusive", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetImmuneTypesAreInclusive" + }, + { + "name": "RemoveAfterAttackCount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetRemoveAfterAttackCount" + }, + { + "name": "ImmuneTypesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "ImmuneTypes", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "ImmuneTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "NumActionPoints", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumActionPoints" + }, + { + "name": "PointType", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetPointType" + }, + { + "name": "ApplyOnlyWhenOut", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetApplyOnlyWhenOut" + }, + { + "name": "SelectUnit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetSelectUnit" + }, + { + "name": "SkipWithEffectMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "SkipWithEffect", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "SkipWithEffectMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "EffectNamesToRemoveMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_RemoveEffects" + }, + { + "name": "EffectNamesToRemove", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "EffectNamesToRemoveMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "Cleanse", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCleanse" + }, + { + "name": "CheckSource", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCheckSource" + }, + { + "name": "DoNotVisualize", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDoNotVisualize" + }, + { + "name": "UnitName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetUnitName" + }, + { + "name": "NewValueToSet", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetNewValueToSet" + }, + { + "name": "CleanupType", + "type": "EUnitValueCleanup", + "kind": "optionalScalar", + "description": "", + "guard": "SetCleanupType" + }, + { + "name": "ArmorMitigationAmount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetArmorMitigationAmount" + }, + { + "name": "StunLevel", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetStunLevel" + }, + { + "name": "SkipAnimation", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetSkipAnimation" + }, + { + "name": "StunStartAnimName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetStunStartAnimName" + }, + { + "name": "StunStopAnimName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetStunStopAnimName" + }, + { + "name": "StunnedTriggerName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetStunnedTriggerName" + }, + { + "name": "SustainedAbilityName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetSustainedAbilityName" + }, + { + "name": "FragileAmount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetFragileAmount" + }, + { + "name": "EffectsToRemoveFromSourceMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "EffectsToRemoveFromSource", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "EffectsToRemoveFromSourceMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "EffectsToRemoveFromTargetMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "EffectsToRemoveFromTarget", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "EffectsToRemoveFromTargetMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "RegisterAdditionalEventsLikeImpairMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "RegisterAdditionalEventsLikeImpair", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "RegisterAdditionalEventsLikeImpairMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ReasonNotVisible", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetReasonNotVisible" + }, + { + "name": "VanishRevealAdditiveAnimName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetVanishRevealAdditiveAnimName" + }, + { + "name": "VanishRevealAnimName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetVanishRevealAnimName" + }, + { + "name": "VanishSyncAnimName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetVanishSyncAnimName" + }, + { + "name": "ReserveType", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetReserveType" + }, + { + "name": "NumPoints", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumPoints" + }, + { + "name": "AbilityToActivate", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetAbilityToActivate" + }, + { + "name": "GrantActionPoint", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetGrantActionPoint" + }, + { + "name": "MaxPointsPerTurn", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMaxPointsPerTurn" + }, + { + "name": "DirectAttackOnly", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDirectAttackOnly" + }, + { + "name": "PreEmptiveFire", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetPreEmptiveFire" + }, + { + "name": "OnlyDuringEnemyTurn", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyDuringEnemyTurn" + }, + { + "name": "UseMultiTargets", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseMultiTargets" + }, + { + "name": "OnlyWhenAttackMisses", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyWhenAttackMisses" + }, + { + "name": "SelfTargeting", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetSelfTargeting" + }, + { + "name": "ActivationPercentChance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetActivationPercentChance" + }, + { + "name": "TraversalChangesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_PersistentTraversalChange (merged by Traversal)" + }, + { + "name": "TraversalChanges", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "TraversalChangesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ToHitMin", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetToHitMin" + }, + { + "name": "DmgMod", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetDmgMod" + }, + { + "name": "AdverseClassesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_AdverseSoldierClasses" + }, + { + "name": "AdverseClasses", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AdverseClassesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "BonusDamageMult", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetBonusDamageMult" + }, + { + "name": "MinBonusDamage", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMinBonusDamage" + }, + { + "name": "OverrideParticleSystemFill_Name", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetOverrideParticleSystemFill_Name" + }, + { + "name": "DamageTypeTemplateName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamageTypeTemplateName" + }, + { + "name": "PlusNumZTiles", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPlusNumZTiles" + }, + { + "name": "UseWeaponEnvironmentalDamage", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseWeaponEnvironmentalDamage" + }, + { + "name": "UseWeaponDamageType", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseWeaponDamageType" + }, + { + "name": "HitSourceTile", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetHitSourceTile" + }, + { + "name": "HitTargetTile", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetHitTargetTile" + }, + { + "name": "HitAdjacentDestructibles", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetHitAdjacentDestructibles" + }, + { + "name": "AllowDestructionOfDamageCauseCover", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowDestructionOfDamageCauseCover" + }, + { + "name": "FireChance_Level1", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetFireChance_Level1" + }, + { + "name": "FireChance_Level2", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetFireChance_Level2" + }, + { + "name": "FireChance_Level3", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetFireChance_Level3" + }, + { + "name": "UseFireChanceLevel", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseFireChanceLevel" + }, + { + "name": "DamageFragileOnly", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamageFragileOnly" + }, + { + "name": "CheckForLOSFromTargetLocation", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCheckForLOSFromTargetLocation" + }, + { + "name": "PerUseHP", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPerUseHP" + }, + { + "name": "IncreasedHealProject", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetIncreasedHealProject" + }, + { + "name": "IncreasedPerUseHP", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetIncreasedPerUseHP" + }, + { + "name": "Pierce", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPierce" + }, + { + "name": "CritChance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetCritChance" + }, + { + "name": "CritDamage", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetCritDamage" + }, + { + "name": "EventsToUpdateMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_Aura" + }, + { + "name": "EventsToUpdate", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "EventsToUpdateMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "NumHitsForMod", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumHitsForMod" + }, + { + "name": "ExplosiveDamageReduction", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetExplosiveDamageReduction" + }, + { + "name": "BonusDamage", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetBonusDamage" + }, + { + "name": "BonusDmg", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetBonusDmg" + }, + { + "name": "WillMod", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetWillMod" + }, + { + "name": "ModifyOutgoingDamage", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetModifyOutgoingDamage" + }, + { + "name": "ModifyIncomingDamage", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetModifyIncomingDamage" + }, + { + "name": "DamageModifier", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamageModifier" + }, + { + "name": "DamageBonus", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamageBonus" + }, + { + "name": "TriggerEventName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetTriggerEventName" + }, + { + "name": "GlobalAbility", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetGlobalAbility" + }, + { + "name": "CoverType", + "type": "ECoverForceFlag", + "kind": "optionalScalar", + "description": "", + "guard": "SetCoverType" + }, + { + "name": "RemoveWhenMoved", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRemoveWhenMoved" + }, + { + "name": "RemoveOnOtherActivation", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRemoveOnOtherActivation" + }, + { + "name": "OverrideStartAnimName", + "type": "Name", + "kind": "optionalScalar", + "description": "", + "guard": "SetOverrideStartAnimName" + }, + { + "name": "OverrideStopAnimName", + "type": "Name", + "kind": "optionalScalar", + "description": "", + "guard": "SetOverrideStopAnimName" + }, + { + "name": "RequireVisibleTile", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRequireVisibleTile" + }, + { + "name": "HeightBonus", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetHeightBonus" + }, + { + "name": "AllowedAbilitiesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_Guardian" + }, + { + "name": "AllowedAbilities", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AllowedAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ProcChance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetProcChance" + }, + { + "name": "HitMod", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetHitMod" + }, + { + "name": "DelayTimeS", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetDelayTimeS" + }, + { + "name": "AbilityToTrigger", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetAbilityToTrigger" + }, + { + "name": "BonusCritChance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetBonusCritChance" + }, + { + "name": "AbilityName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetAbilityName" + }, + { + "name": "ActivateAbilityOnTarget", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetActivateAbilityOnTarget" + }, + { + "name": "EffectTargetOnly", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetEffectTargetOnly" + }, + { + "name": "ImplacableThisTurnValue", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetImplacableThisTurnValue" + }, + { + "name": "CohesionAmount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetCohesionAmount" + }, + { + "name": "ShieldPerMiss", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetShieldPerMiss" + }, + { + "name": "KnockbackDistance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetKnockbackDistance" + }, + { + "name": "KnockbackDestroysNonFragile", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetKnockbackDestroysNonFragile" + }, + { + "name": "OverrideRagdollFinishTimerSec", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetOverrideRagdollFinishTimerSec" + }, + { + "name": "OnlyOnDeath", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyOnDeath" + }, + { + "name": "BenefitFromEmpoweredUpgrades", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetBenefitFromEmpoweredUpgrades" + }, + { + "name": "CritBonus", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetCritBonus" + }, + { + "name": "LifeAmountMultiplier", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetLifeAmountMultiplier" + }, + { + "name": "AbilityToMark", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetAbilityToMark" + }, + { + "name": "OnlyUseTargetLocation", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyUseTargetLocation" + }, + { + "name": "VisualizeFlagsOnCursor", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetVisualizeFlagsOnCursor" + }, + { + "name": "DamageMod", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamageMod" + }, + { + "name": "MeleeDamageTypeName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetMeleeDamageTypeName" + }, + { + "name": "NumTurnsForAI", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumTurnsForAI" + }, + { + "name": "RemoveGroupFromInitiativeOrder", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRemoveGroupFromInitiativeOrder" + }, + { + "name": "AddGroupToInitiativeOrder", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAddGroupToInitiativeOrder" + }, + { + "name": "AllowCrit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowCrit" + }, + { + "name": "ReactionModifier", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetReactionModifier" + }, + { + "name": "ModifyFocus", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetModifyFocus" + }, + { + "name": "ArmorPierce", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetArmorPierce" + }, + { + "name": "ObsessedTargetValueName", + "type": "Name", + "kind": "optionalScalar", + "description": "", + "guard": "SetObsessedTargetValueName" + }, + { + "name": "OverrideAnimNameOnLoad", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetOverrideAnimNameOnLoad" + }, + { + "name": "CritBoostPerKill", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetCritBoostPerKill" + }, + { + "name": "MaxCritBoost", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMaxCritBoost" + }, + { + "name": "ParthenogenicPoisonType", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetParthenogenicPoisonType" + }, + { + "name": "ParthenogenicPoisonCocoonSpawnedName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetParthenogenicPoisonCocoonSpawnedName" + }, + { + "name": "AltUnitToSpawnName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetAltUnitToSpawnName" + }, + { + "name": "UseWeaponRadius", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseWeaponRadius" + }, + { + "name": "ViewRadius", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetViewRadius" + }, + { + "name": "UseSourceLocation", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseSourceLocation" + }, + { + "name": "InitialDamage", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetInitialDamage" + }, + { + "name": "WeaponTemplateName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetWeaponTemplateName" + }, + { + "name": "ReaperActivatedName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetReaperActivatedName" + }, + { + "name": "ReaperKillName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetReaperKillName" + }, + { + "name": "Amount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetAmount" + }, + { + "name": "ReduceAll", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetReduceAll" + }, + { + "name": "AbilitiesToTickMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_ReduceCooldowns" + }, + { + "name": "AbilitiesToTick", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AbilitiesToTickMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "HealAmount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetHealAmount" + }, + { + "name": "MaxHealAmount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMaxHealAmount" + }, + { + "name": "HealthRegeneratedName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetHealthRegeneratedName" + }, + { + "name": "EventToTriggerOnHeal", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetEventToTriggerOnHeal" + }, + { + "name": "UnitDamageMultiplier", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetUnitDamageMultiplier" + }, + { + "name": "DamageRadiusMultiplier", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamageRadiusMultiplier" + }, + { + "name": "DamageTypesToRemoveMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_RemoveEffectsByDamageType" + }, + { + "name": "DamageTypesToRemove", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "DamageTypesToRemoveMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "UseAllPointsWithAbilitiesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_ReserveOverwatchPoints" + }, + { + "name": "UseAllPointsWithAbilities", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "UseAllPointsWithAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "NumActions", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumActions" + }, + { + "name": "BehaviorTreeName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetBehaviorTreeName" + }, + { + "name": "InitFromPlayer", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetInitFromPlayer" + }, + { + "name": "SetActionPointCount", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetSetActionPointCount" + }, + { + "name": "LookAtDuration", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetLookAtDuration" + }, + { + "name": "ShatteredTargetValueName", + "type": "Name", + "kind": "optionalScalar", + "description": "", + "guard": "SetShatteredTargetValueName" + }, + { + "name": "UnitValueToRead", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetUnitValueToRead" + }, + { + "name": "DestructibleArchetype", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetDestructibleArchetype" + }, + { + "name": "DestroyOnRemoval", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDestroyOnRemoval" + }, + { + "name": "TargetableBySpawnedTeamOnly", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetTargetableBySpawnedTeamOnly" + }, + { + "name": "AnimationName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetAnimationName" + }, + { + "name": "StartAnimationMinDelaySec", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetStartAnimationMinDelaySec" + }, + { + "name": "StartAnimationMaxDelaySec", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetStartAnimationMaxDelaySec" + }, + { + "name": "ShadowbindUnconciousCheckName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetShadowbindUnconciousCheckName" + }, + { + "name": "UnitToSpawnName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetUnitToSpawnName" + }, + { + "name": "ClearTileBlockedByTargetUnitFlag", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetClearTileBlockedByTargetUnitFlag" + }, + { + "name": "CopyTargetAppearance", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCopyTargetAppearance" + }, + { + "name": "CopySourceAppearance", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCopySourceAppearance" + }, + { + "name": "KnockbackAffectsSpawnLocation", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetKnockbackAffectsSpawnLocation" + }, + { + "name": "AddToSourceGroup", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAddToSourceGroup" + }, + { + "name": "CopyReanimatedFromUnit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCopyReanimatedFromUnit" + }, + { + "name": "CopyReanimatedStatsFromUnit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCopyReanimatedStatsFromUnit" + }, + { + "name": "SetProcessedScamperAs", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetSetProcessedScamperAs" + }, + { + "name": "BecomeUnspotted", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetBecomeUnspotted" + }, + { + "name": "StunStartAnim", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetStunStartAnim" + }, + { + "name": "StunStopAnim", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetStunStopAnim" + }, + { + "name": "SkipFlyover", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetSkipFlyover" + }, + { + "name": "StartAnimBlendTime", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetStartAnimBlendTime" + }, + { + "name": "ConcealAmountScalar", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetConcealAmountScalar" + }, + { + "name": "AbilitiesAffectedFilterMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_SuperConcealModifier" + }, + { + "name": "AbilitiesAffectedFilter", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AbilitiesAffectedFilterMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "RemoveOnAbilityActivationMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_SuperConcealModifier" + }, + { + "name": "RemoveOnAbilityActivation", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "RemoveOnAbilityActivationMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ResumeMissionTimer", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetResumeMissionTimer" + }, + { + "name": "AimMod", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetAimMod" + }, + { + "name": "BonusDmgFloat", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetBonusDmgFloat" + }, + { + "name": "BonusModType", + "type": "EStatModOp", + "kind": "optionalScalar", + "description": "", + "guard": "SetBonusModType" + }, + { + "name": "WithinTileDistance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetWithinTileDistance" + }, + { + "name": "PrimaryTargetOnly", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetPrimaryTargetOnly" + }, + { + "name": "BonusDamageTypesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_TargetDamageTypeBonus" + }, + { + "name": "BonusDamageTypes", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "BonusDamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ImmediateActionPoint", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetImmediateActionPoint" + }, + { + "name": "ApplyAsTarget", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetApplyAsTarget" + }, + { + "name": "ConeLength", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetConeLength" + }, + { + "name": "ConeEndDiameter", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetConeEndDiameter" + }, + { + "name": "PassTargetAsSource", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetPassTargetAsSource" + }, + { + "name": "ActionPointType", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetActionPointType" + }, + { + "name": "ActionPointsRemoved", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetActionPointsRemoved" + }, + { + "name": "MovingVanishRevealAdditiveAnimName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetMovingVanishRevealAdditiveAnimName" + }, + { + "name": "DamagePerAction", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetDamagePerAction" + }, + { + "name": "HealthReturnMod", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetHealthReturnMod" + }, + { + "name": "WallBreakingEffectName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetWallBreakingEffectName" + }, + { + "name": "CenterTile", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCenterTile" + }, + { + "name": "StatTypesToRestoreMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "X2Effect_PersistentStatChangeRestoreDefault" + }, + { + "name": "StatTypesToRestore", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "StatTypesToRestoreMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ApplyDamageModConditions", + "type": "array", + "kind": "nested", + "description": "X2Effect_ConditionalDamageModifier" + }, + { + "name": "LethalDamageConditions", + "type": "array", + "kind": "nested", + "description": "X2Effect_LethalWeaponDamage" + }, + { + "name": "ToHitConditions", + "type": "array", + "kind": "nested", + "description": "X2Effect_ToHitModifier" + }, + { + "name": "EffectHitModifiers", + "type": "array", + "kind": "plainArray", + "description": "**Replace-only**: when non-empty, replaces `X2Effect_ToHitModifier.Modifiers` entirely (`EffectHitModifier` entries, incl. `MatchToHit` class ref via qualified name)." + }, + { + "name": "CustomProperties", + "type": "array", + "kind": "nested", + "description": "Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors." + } + ] + }, + { + "name": "ToHitCalcEdit", + "fields": [ + { + "name": "Class", + "type": "string", + "kind": "plain", + "description": "Optional. Omitted = edit the existing calc in place. Set = target/instantiate that class, e.g. `X2AbilityToHitCalc_StandardAim`. Bare names are auto-prefixed with `XComGame.`." + }, + { + "name": "HitModifiers", + "type": "array", + "kind": "plainArray", + "description": "**Replace-only**: when non-empty, replaces the calc's always-on `HitModifiers` array entirely (`ShotModifierInfo`: `ModType`, `Value`, `Reason`)." + }, + { + "name": "IndirectFire", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIndirectFire" + }, + { + "name": "MeleeAttack", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetMeleeAttack" + }, + { + "name": "ReactionFire", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetReactionFire" + }, + { + "name": "AllowCrit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowCrit" + }, + { + "name": "HitsAreCrits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetHitsAreCrits" + }, + { + "name": "MultiTargetOnly", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetMultiTargetOnly" + }, + { + "name": "OnlyMultiHitWithSuccess", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyMultiHitWithSuccess" + }, + { + "name": "GuaranteedHit", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetGuaranteedHit" + }, + { + "name": "IgnoreCoverBonus", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIgnoreCoverBonus" + }, + { + "name": "FinalMultiplier", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetFinalMultiplier" + }, + { + "name": "BuiltInHitMod", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetBuiltInHitMod" + }, + { + "name": "BuiltInCritMod", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetBuiltInCritMod" + }, + { + "name": "PercentToHit", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPercentToHit" + }, + { + "name": "NoGameStateOnMiss", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetNoGameStateOnMiss" + }, + { + "name": "FocusMultiplier", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetFocusMultiplier" + }, + { + "name": "PercentToHitInBuddyZone", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPercentToHitInBuddyZone" + }, + { + "name": "AlwaysSucceed", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAlwaysSucceed" + }, + { + "name": "StatToRoll", + "type": "ECharStatType", + "kind": "optionalScalar", + "description": "", + "guard": "SetStatToRoll" + }, + { + "name": "BaseChance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetBaseChance" + }, + { + "name": "BaseValue", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetBaseValue" + }, + { + "name": "AttackerStat", + "type": "ECharStatType", + "kind": "optionalScalar", + "description": "", + "guard": "SetAttackerStat" + }, + { + "name": "DefenderStat", + "type": "ECharStatType", + "kind": "optionalScalar", + "description": "", + "guard": "SetDefenderStat" + }, + { + "name": "CustomProperties", + "type": "array", + "kind": "nested", + "description": "Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors." + } + ] + }, + { + "name": "TargetStyleEdit", + "fields": [ + { + "name": "Class", + "type": "string", + "kind": "plain", + "description": "Optional. Omitted = edit the existing style in place. Set = target/instantiate that class, e.g. `X2AbilityTarget_Cursor`. Bare names are auto-prefixed with `XComGame.`." + }, + { + "name": "OnlyIncludeTargetsInsideWeaponRange", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyIncludeTargetsInsideWeaponRange" + }, + { + "name": "AllowInteractiveObjects", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowInteractiveObjects" + }, + { + "name": "AllowDestructibleObjects", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowDestructibleObjects" + }, + { + "name": "IncludeSelf", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIncludeSelf" + }, + { + "name": "ShowAOE", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetShowAOE" + }, + { + "name": "RestrictToWeaponRange", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRestrictToWeaponRange" + }, + { + "name": "IncreaseWeaponRange", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetIncreaseWeaponRange" + }, + { + "name": "RestrictToSquadsightRange", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRestrictToSquadsightRange" + }, + { + "name": "FixedAbilityRange", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetFixedAbilityRange" + }, + { + "name": "MovementRangeAdjustment", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetMovementRangeAdjustment" + }, + { + "name": "CustomProperties", + "type": "array", + "kind": "nested", + "description": "Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors." + } + ] + }, + { + "name": "MultiTargetStyleEdit", + "fields": [ + { + "name": "Class", + "type": "string", + "kind": "plain", + "description": "Optional. Omitted = edit the existing style in place. Set = target/instantiate that class, e.g. `X2AbilityMultiTarget_Radius`. Bare names are auto-prefixed with `XComGame.`." + }, + { + "name": "AllowSameTarget", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowSameTarget" + }, + { + "name": "UseSourceWeaponLocation", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseSourceWeaponLocation" + }, + { + "name": "NumTargetsRequired", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumTargetsRequired" + }, + { + "name": "UseWeaponRadius", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseWeaponRadius" + }, + { + "name": "UseWeaponBlockingCoverFlag", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseWeaponBlockingCoverFlag" + }, + { + "name": "IgnoreBlockingCover", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIgnoreBlockingCover" + }, + { + "name": "TargetRadius", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetTargetRadius" + }, + { + "name": "TargetCoveragePercentage", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetTargetCoveragePercentage" + }, + { + "name": "AddPrimaryTargetAsMultiTarget", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAddPrimaryTargetAsMultiTarget" + }, + { + "name": "AllowDeadMultiTargetUnits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowDeadMultiTargetUnits" + }, + { + "name": "ExcludeSelfAsTargetIfWithinRadius", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetExcludeSelfAsTargetIfWithinRadius" + }, + { + "name": "AbilityBonusRadiiMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "merged by RequiredAbility" + }, + { + "name": "AbilityBonusRadii", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AbilityBonusRadiiMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "ConeEndDiameter", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetConeEndDiameter" + }, + { + "name": "ConeLength", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetConeLength" + }, + { + "name": "UseWeaponRangeForLength", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseWeaponRangeForLength" + }, + { + "name": "LockShooterZ", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetLockShooterZ" + }, + { + "name": "AbilityBonusConesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "merged by RequiredAbility" + }, + { + "name": "AbilityBonusCones", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AbilityBonusConesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "TileWidthExtension", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetTileWidthExtension" + }, + { + "name": "SightRangeLimited", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetSightRangeLimited" + }, + { + "name": "AbilityBonusWidthsMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "merged by RequiredAbility" + }, + { + "name": "AbilityBonusWidths", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AbilityBonusWidthsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "TargetHeight", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetTargetHeight" + }, + { + "name": "UseOnlyGroundTiles", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseOnlyGroundTiles" + }, + { + "name": "NumExtraShots", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetNumExtraShots" + }, + { + "name": "OnlyAllyOfType", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyAllyOfType" + }, + { + "name": "AcceptFriendlyUnits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAcceptFriendlyUnits" + }, + { + "name": "AcceptEnemyUnits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAcceptEnemyUnits" + }, + { + "name": "OnlyAcceptRoboticUnits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyAcceptRoboticUnits" + }, + { + "name": "OnlyAcceptAlienUnits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyAcceptAlienUnits" + }, + { + "name": "OnlyAcceptAdventUnits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetOnlyAcceptAdventUnits" + }, + { + "name": "RandomlySelectOne", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetRandomlySelectOne" + }, + { + "name": "DontAcceptNeutralUnits", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDontAcceptNeutralUnits" + }, + { + "name": "RandomChance", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetRandomChance" + }, + { + "name": "UseAbilitySourceAsPrimaryTarget", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseAbilitySourceAsPrimaryTarget" + }, + { + "name": "ClaymoreEnvironmentalDamage", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetClaymoreEnvironmentalDamage" + }, + { + "name": "CustomProperties", + "type": "array", + "kind": "nested", + "description": "Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors." + } + ] + }, + { + "name": "TriggerEdit", + "fields": [ + { + "name": "Class", + "type": "string", + "kind": "plain", + "description": "Trigger class to target/instantiate, e.g. `X2AbilityTrigger_UnitPostBeginPlay`. Bare names are auto-prefixed with `XComGame.`." + }, + { + "name": "Mode", + "type": "EArrayEditMode", + "kind": "plain", + "description": "Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes)." + }, + { + "name": "Priority", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPriority" + }, + { + "name": "ListenerEventID", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetListenerEventID" + }, + { + "name": "ListenerDeferral", + "type": "EventListenerDeferral", + "kind": "optionalScalar", + "description": "", + "guard": "SetListenerDeferral" + }, + { + "name": "ListenerFilter", + "type": "AbilityEventFilter", + "kind": "optionalScalar", + "description": "", + "guard": "SetListenerFilter" + }, + { + "name": "ListenerPriority", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetListenerPriority" + }, + { + "name": "MethodName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetMethodName" + }, + { + "name": "EventObserverClass", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetEventObserverClass" + }, + { + "name": "CustomProperties", + "type": "array", + "kind": "nested", + "description": "Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors." + } + ] + }, + { + "name": "AbilityEventListenerEdit", + "fields": [ + { + "name": "EventID", + "type": "name", + "kind": "plain", + "description": "Matches the existing `Template.AbilityEventListeners` entry to edit. Entries cannot be added (their `EventFn` delegate is code-only)." + }, + { + "name": "Deferral", + "type": "EventListenerDeferral", + "kind": "optionalScalar", + "description": "", + "guard": "SetDeferral" + }, + { + "name": "Filter", + "type": "AbilityEventFilter", + "kind": "optionalScalar", + "description": "", + "guard": "SetFilter" + }, + { + "name": "Priority", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetPriority" + } + ] + }, + { + "name": "ExtraEditorRegistration", + "fields": [ + { + "name": "EditorClass", + "type": "string", + "kind": "plain", + "description": "" + }, + { + "name": "Priority", + "type": "int", + "kind": "plain", + "description": "" + } + ] + }, + { + "name": "AbilityEdit", + "fields": [ + { + "name": "Ability", + "type": "name", + "kind": "plain", + "description": "Required. Template name of the ability to edit (e.g. `SwordSlice`)." + }, + { + "name": "Hostility", + "type": "EAbilityHostility", + "kind": "optionalScalar", + "description": "Whether the ability is offensive, defensive or neutral. Drives AI targeting and the reticle colour. One of eHostility_Offensive, eHostility_Defensive, eHostility_Neutral.", + "guard": "SetHostility" + }, + { + "name": "ConcealmentRule", + "type": "EConcealmentRule", + "kind": "optionalScalar", + "description": "What happens to the shooter's concealment when the ability is used.", + "guard": "SetConcealmentRule" + }, + { + "name": "AdditionalAbilities", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AdditionalAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "AdditionalAbilitiesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "PrerequisiteAbilities", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "PrerequisiteAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "PrerequisiteAbilitiesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "OverrideAbilities", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "OverrideAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "OverrideAbilitiesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "Cooldown", + "type": "CooldownEdit", + "kind": "nested", + "description": "" + }, + { + "name": "CostMode", + "type": "EAbilityCostEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "Costs", + "type": "array", + "kind": "nested", + "description": "", + "modeField": "CostMode", + "modeEnum": "EAbilityCostEditMode" + }, + { + "name": "Charges", + "type": "ChargesEdit", + "kind": "nested", + "description": "" + }, + { + "name": "Effects", + "type": "array", + "kind": "nested", + "description": "" + }, + { + "name": "ShooterConditions", + "type": "array", + "kind": "nested", + "description": "Template-level condition arrays" + }, + { + "name": "TargetConditions", + "type": "array", + "kind": "nested", + "description": "" + }, + { + "name": "MultiTargetConditions", + "type": "array", + "kind": "nested", + "description": "" + }, + { + "name": "ToHitCalc", + "type": "ToHitCalcEdit", + "kind": "nested", + "description": "To-hit calc slots" + }, + { + "name": "ToHitOwnerOnMissCalc", + "type": "ToHitCalcEdit", + "kind": "nested", + "description": "" + }, + { + "name": "TargetStyle", + "type": "TargetStyleEdit", + "kind": "nested", + "description": "Targeting style slots" + }, + { + "name": "MultiTargetStyle", + "type": "MultiTargetStyleEdit", + "kind": "nested", + "description": "" + }, + { + "name": "Triggers", + "type": "array", + "kind": "nested", + "description": "Trigger array + event listener edits" + }, + { + "name": "AbilityEventListenerEdits", + "type": "array", + "kind": "nested", + "description": "" + }, + { + "name": "CrossClassEligible", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCrossClassEligible" + }, + { + "name": "IsPassive", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetIsPassive" + }, + { + "name": "UniqueSource", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUniqueSource" + }, + { + "name": "AllowedByDefault", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowedByDefault" + }, + { + "name": "TriggerChance", + "type": "float", + "kind": "optionalScalar", + "description": "", + "guard": "SetTriggerChance" + }, + { + "name": "SuperConcealmentLoss", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetSuperConcealmentLoss" + }, + { + "name": "ChosenActivationIncreasePerUse", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetChosenActivationIncreasePerUse" + }, + { + "name": "LostSpawnIncreasePerUse", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetLostSpawnIncreasePerUse" + }, + { + "name": "AbilityPointCost", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetAbilityPointCost" + }, + { + "name": "DefaultSourceItemSlot", + "type": "EInventorySlot", + "kind": "optionalScalar", + "description": "", + "guard": "SetDefaultSourceItemSlot" + }, + { + "name": "UseThrownGrenadeEffects", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseThrownGrenadeEffects" + }, + { + "name": "UseLaunchedGrenadeEffects", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseLaunchedGrenadeEffects" + }, + { + "name": "AllowFreeFireWeaponUpgrade", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowFreeFireWeaponUpgrade" + }, + { + "name": "AllowAmmoEffects", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowAmmoEffects" + }, + { + "name": "AllowBonusWeaponEffects", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetAllowBonusWeaponEffects" + }, + { + "name": "SilentAbility", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetSilentAbility" + }, + { + "name": "CannotTeleport", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCannotTeleport" + }, + { + "name": "PreventsTargetTeleport", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetPreventsTargetTeleport" + }, + { + "name": "FinalizeAbilityName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetFinalizeAbilityName" + }, + { + "name": "CancelAbilityName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetCancelAbilityName" + }, + { + "name": "TwoTurnAttackAbility", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetTwoTurnAttackAbility" + }, + { + "name": "IconImage", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetIconImage" + }, + { + "name": "AbilityIconColor", + "type": "string", + "kind": "optionalScalar", + "description": "", + "guard": "SetAbilityIconColor" + }, + { + "name": "AbilityIconBehaviorHUD", + "type": "EAbilityIconBehavior", + "kind": "optionalScalar", + "description": "", + "guard": "SetAbilityIconBehaviorHUD" + }, + { + "name": "ShotHUDPriority", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetShotHUDPriority" + }, + { + "name": "DisplayInUITooltip", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDisplayInUITooltip" + }, + { + "name": "DisplayInUITacticalText", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDisplayInUITacticalText" + }, + { + "name": "DontDisplayInAbilitySummary", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDontDisplayInAbilitySummary" + }, + { + "name": "DisplayTargetHitChance", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetDisplayTargetHitChance" + }, + { + "name": "HideOnClassUnlock", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetHideOnClassUnlock" + }, + { + "name": "AbilitySourceName", + "type": "name", + "kind": "optionalScalar", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "name": "LimitTargetIcons", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetLimitTargetIcons" + }, + { + "name": "BypassAbilityConfirm", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetBypassAbilityConfirm" + }, + { + "name": "UseAmmoAsChargesForHUD", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetUseAmmoAsChargesForHUD" + }, + { + "name": "AmmoAsChargesDivisor", + "type": "int", + "kind": "optionalScalar", + "description": "", + "guard": "SetAmmoAsChargesDivisor" + }, + { + "name": "FriendlyFireWarning", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetFriendlyFireWarning" + }, + { + "name": "FriendlyFireWarningRobotsOnly", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetFriendlyFireWarningRobotsOnly" + }, + { + "name": "CommanderAbility", + "type": "bool", + "kind": "optionalScalar", + "description": "", + "guard": "SetCommanderAbility" + }, + { + "name": "AssociatedPassivesMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "--- Template name arrays ---" + }, + { + "name": "AssociatedPassives", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "AssociatedPassivesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "PostActivationEventsMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "PostActivationEvents", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "PostActivationEventsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "name": "HideIfAvailableMode", + "type": "ENameArrayEditMode", + "kind": "mode", + "description": "" + }, + { + "name": "HideIfAvailable", + "type": "array", + "kind": "modedArray", + "description": "", + "modeField": "HideIfAvailableMode", + "modeEnum": "ENameArrayEditMode" + } + ] + } + ], + "template": { + "fields": [ + { + "config": "Hostility", + "type": "EAbilityHostility", + "kind": "scalar", + "gameField": "Hostility", + "description": "Whether the ability is offensive, defensive or neutral. Drives AI targeting and the reticle colour. One of eHostility_Offensive, eHostility_Defensive, eHostility_Neutral.", + "guard": "SetHostility" + }, + { + "config": "ConcealmentRule", + "type": "EConcealmentRule", + "kind": "scalar", + "gameField": "ConcealmentRule", + "description": "What happens to the shooter's concealment when the ability is used.", + "guard": "SetConcealmentRule" + }, + { + "config": "CrossClassEligible", + "type": "bool", + "kind": "scalar", + "gameField": "bCrossClassEligible", + "description": "", + "guard": "SetCrossClassEligible" + }, + { + "config": "IsPassive", + "type": "bool", + "kind": "scalar", + "gameField": "bIsPassive", + "description": "", + "guard": "SetIsPassive" + }, + { + "config": "UniqueSource", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueSource", + "description": "", + "guard": "SetUniqueSource" + }, + { + "config": "AllowedByDefault", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowedByDefault", + "description": "", + "guard": "SetAllowedByDefault" + }, + { + "config": "TriggerChance", + "type": "float", + "kind": "scalar", + "gameField": "TriggerChance", + "description": "", + "guard": "SetTriggerChance" + }, + { + "config": "SuperConcealmentLoss", + "type": "int", + "kind": "scalar", + "gameField": "SuperConcealmentLoss", + "description": "", + "guard": "SetSuperConcealmentLoss" + }, + { + "config": "ChosenActivationIncreasePerUse", + "type": "int", + "kind": "scalar", + "gameField": "ChosenActivationIncreasePerUse", + "description": "", + "guard": "SetChosenActivationIncreasePerUse" + }, + { + "config": "LostSpawnIncreasePerUse", + "type": "int", + "kind": "scalar", + "gameField": "LostSpawnIncreasePerUse", + "description": "", + "guard": "SetLostSpawnIncreasePerUse" + }, + { + "config": "AbilityPointCost", + "type": "int", + "kind": "scalar", + "gameField": "AbilityPointCost", + "description": "", + "guard": "SetAbilityPointCost" + }, + { + "config": "DefaultSourceItemSlot", + "type": "EInventorySlot", + "kind": "scalar", + "gameField": "DefaultSourceItemSlot", + "description": "", + "guard": "SetDefaultSourceItemSlot" + }, + { + "config": "UseThrownGrenadeEffects", + "type": "bool", + "kind": "scalar", + "gameField": "bUseThrownGrenadeEffects", + "description": "", + "guard": "SetUseThrownGrenadeEffects" + }, + { + "config": "UseLaunchedGrenadeEffects", + "type": "bool", + "kind": "scalar", + "gameField": "bUseLaunchedGrenadeEffects", + "description": "", + "guard": "SetUseLaunchedGrenadeEffects" + }, + { + "config": "AllowFreeFireWeaponUpgrade", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowFreeFireWeaponUpgrade", + "description": "", + "guard": "SetAllowFreeFireWeaponUpgrade" + }, + { + "config": "AllowAmmoEffects", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowAmmoEffects", + "description": "", + "guard": "SetAllowAmmoEffects" + }, + { + "config": "AllowBonusWeaponEffects", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowBonusWeaponEffects", + "description": "", + "guard": "SetAllowBonusWeaponEffects" + }, + { + "config": "SilentAbility", + "type": "bool", + "kind": "scalar", + "gameField": "bSilentAbility", + "description": "", + "guard": "SetSilentAbility" + }, + { + "config": "CannotTeleport", + "type": "bool", + "kind": "scalar", + "gameField": "bCannotTeleport", + "description": "", + "guard": "SetCannotTeleport" + }, + { + "config": "PreventsTargetTeleport", + "type": "bool", + "kind": "scalar", + "gameField": "bPreventsTargetTeleport", + "description": "", + "guard": "SetPreventsTargetTeleport" + }, + { + "config": "FinalizeAbilityName", + "type": "name", + "kind": "scalar", + "gameField": "FinalizeAbilityName", + "description": "", + "guard": "SetFinalizeAbilityName" + }, + { + "config": "CancelAbilityName", + "type": "name", + "kind": "scalar", + "gameField": "CancelAbilityName", + "description": "", + "guard": "SetCancelAbilityName" + }, + { + "config": "TwoTurnAttackAbility", + "type": "name", + "kind": "scalar", + "gameField": "TwoTurnAttackAbility", + "description": "", + "guard": "SetTwoTurnAttackAbility" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "AbilityIconColor", + "type": "string", + "kind": "scalar", + "gameField": "AbilityIconColor", + "description": "", + "guard": "SetAbilityIconColor" + }, + { + "config": "AbilityIconBehaviorHUD", + "type": "EAbilityIconBehavior", + "kind": "scalar", + "gameField": "eAbilityIconBehaviorHUD", + "description": "", + "guard": "SetAbilityIconBehaviorHUD" + }, + { + "config": "ShotHUDPriority", + "type": "int", + "kind": "scalar", + "gameField": "ShotHUDPriority", + "description": "", + "guard": "SetShotHUDPriority" + }, + { + "config": "DisplayInUITooltip", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUITooltip", + "description": "", + "guard": "SetDisplayInUITooltip" + }, + { + "config": "DisplayInUITacticalText", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUITacticalText", + "description": "", + "guard": "SetDisplayInUITacticalText" + }, + { + "config": "DontDisplayInAbilitySummary", + "type": "bool", + "kind": "scalar", + "gameField": "bDontDisplayInAbilitySummary", + "description": "", + "guard": "SetDontDisplayInAbilitySummary" + }, + { + "config": "DisplayTargetHitChance", + "type": "bool", + "kind": "scalar", + "gameField": "DisplayTargetHitChance", + "description": "", + "guard": "SetDisplayTargetHitChance" + }, + { + "config": "HideOnClassUnlock", + "type": "bool", + "kind": "scalar", + "gameField": "bHideOnClassUnlock", + "description": "", + "guard": "SetHideOnClassUnlock" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "LimitTargetIcons", + "type": "bool", + "kind": "scalar", + "gameField": "bLimitTargetIcons", + "description": "", + "guard": "SetLimitTargetIcons" + }, + { + "config": "BypassAbilityConfirm", + "type": "bool", + "kind": "scalar", + "gameField": "bBypassAbilityConfirm", + "description": "", + "guard": "SetBypassAbilityConfirm" + }, + { + "config": "UseAmmoAsChargesForHUD", + "type": "bool", + "kind": "scalar", + "gameField": "bUseAmmoAsChargesForHUD", + "description": "", + "guard": "SetUseAmmoAsChargesForHUD" + }, + { + "config": "AmmoAsChargesDivisor", + "type": "int", + "kind": "scalar", + "gameField": "iAmmoAsChargesDivisor", + "description": "", + "guard": "SetAmmoAsChargesDivisor" + }, + { + "config": "FriendlyFireWarning", + "type": "bool", + "kind": "scalar", + "gameField": "bFriendlyFireWarning", + "description": "", + "guard": "SetFriendlyFireWarning" + }, + { + "config": "FriendlyFireWarningRobotsOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bFriendlyFireWarningRobotsOnly", + "description": "", + "guard": "SetFriendlyFireWarningRobotsOnly" + }, + { + "config": "CommanderAbility", + "type": "bool", + "kind": "scalar", + "gameField": "bCommanderAbility", + "description": "", + "guard": "SetCommanderAbility" + }, + { + "config": "AdditionalAbilities", + "type": "array", + "kind": "namearray", + "gameField": "AdditionalAbilities", + "description": "", + "modeField": "AdditionalAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "PrerequisiteAbilities", + "type": "array", + "kind": "namearray", + "gameField": "PrerequisiteAbilities", + "description": "", + "modeField": "PrerequisiteAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "OverrideAbilities", + "type": "array", + "kind": "namearray", + "gameField": "OverrideAbilities", + "description": "", + "modeField": "OverrideAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "AssociatedPassives", + "type": "array", + "kind": "namearray", + "gameField": "AssociatedPassives", + "description": "", + "modeField": "AssociatedPassivesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "PostActivationEvents", + "type": "array", + "kind": "namearray", + "gameField": "PostActivationEvents", + "description": "", + "modeField": "PostActivationEventsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "HideIfAvailable", + "type": "array", + "kind": "namearray", + "gameField": "HideIfAvailable", + "description": "", + "modeField": "HideIfAvailableMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "notEditable": [ + { + "name": "Requirements", + "reason": "type `StrategyRequirement`" + }, + { + "name": "bRecordValidTiles", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bTickPerActionEffects", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bCheckCollision", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bAffectNeighboringTiles", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bFragileDamageOnly", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "AbilityRevealEvent", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "ChosenReinforcementGroupName", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "ChosenTraitType", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "ChosenExcludeTraits", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "ChosenTraitForceLevelGate", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "HideErrors", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bNoConfirmationWithHotKey", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "AbilityConfirmSound", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "DefaultKeyBinding", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "UIStatMarkups", + "reason": "array of `UIAbilityStatMarkup`" + }, + { + "name": "CustomFireAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CustomFireKillAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CustomMovingFireAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CustomMovingFireKillAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CustomMovingTurnLeftFireAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CustomMovingTurnLeftFireKillAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CustomMovingTurnRightFireAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CustomMovingTurnRightFireKillAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CustomSelfFireAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "AssociatedPlayTiming", + "reason": "type `SequencePlayTiming`" + }, + { + "name": "bShowActivation", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bShowPostActivation", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bSkipFireAction", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bSkipExitCoverWhenFiring", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bSkipPerkActivationActions", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bSkipPerkActivationActionsSync", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bSkipMoveStop", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bOverrideMeleeDeath", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bOverrideVisualResult", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "OverrideVisualResult", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bHideWeaponDuringFire", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bHideAmmoWeaponDuringFire", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bIsASuppressionEffect", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bOverrideAim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bUseSourceLocationZToAim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bOverrideWeapon", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bStationaryWeapon", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "ActionFireClass", + "reason": "class reference" + }, + { + "name": "bForceProjectileTouchEvents", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "ActivationSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "SourceHitSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "TargetHitSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "SourceMissSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "TargetMissSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "TargetKilledByAlienSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "TargetKilledByXComSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "MultiTargetsKilledByAlienSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "MultiTargetsKilledByXComSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "TargetWingedSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "TargetArmorHitSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "TargetMissedSpeech", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "AbilityPassiveAOEStyle", + "reason": "type `X2AbilityPassiveAOEStyle`" + }, + { + "name": "bAllowUnderhandAnim", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "TargetingMethod", + "reason": "class reference" + }, + { + "name": "SecondaryTargetingMethod", + "reason": "class reference" + }, + { + "name": "SkipRenderOfAOETargetingTiles", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "SkipRenderOfTargetingTemplate", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "MeleePuckMeshPath", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CinescriptCameraType", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "CameraPriority", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bUsesFiringCamera", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "FrameAbilityCameraType", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "bFrameEvenWhenUnitIsHidden", + "reason": "not covered (deliberate core-set choice)" + }, + { + "name": "BuildNewGameStateFn", + "reason": "delegate — code-only" + }, + { + "name": "BuildInterruptGameStateFn", + "reason": "delegate — code-only" + }, + { + "name": "BuildVisualizationFn", + "reason": "delegate — code-only" + }, + { + "name": "BuildAppliedVisualizationSyncFn", + "reason": "delegate — code-only" + }, + { + "name": "BuildAffectedVisualizationSyncFn", + "reason": "delegate — code-only" + }, + { + "name": "SoldierAbilityPurchasedFn", + "reason": "delegate — code-only" + }, + { + "name": "OnVisualizationTrackInsertedFn", + "reason": "delegate — code-only" + }, + { + "name": "ModifyNewContextFn", + "reason": "delegate — code-only" + }, + { + "name": "DamagePreviewFn", + "reason": "delegate — code-only" + }, + { + "name": "GetBonusWeaponAmmoFn", + "reason": "delegate — code-only" + }, + { + "name": "MergeVisualizationFn", + "reason": "delegate — code-only" + }, + { + "name": "AlternateFriendlyNameFn", + "reason": "delegate — code-only" + }, + { + "name": "ShouldRevealChosenTraitFn", + "reason": "delegate — code-only" + }, + { + "name": "OverrideAbilityAvailabilityFn", + "reason": "delegate — code-only" + }, + { + "name": "MP_PerkOverride", + "reason": "not covered (deliberate core-set choice)" + } + ] + }, + "families": [ + { + "name": "Costs", + "configKey": "Costs", + "editStruct": "CostEdit", + "wired": true, + "dispatchOrder": [ + "X2AbilityCostEditor_Ammo", + "X2AbilityCostEditor_Charges", + "X2AbilityCostEditor_ConsumeItem", + "X2AbilityCostEditor_Focus", + "X2AbilityCostEditor_ReserveActionPoints", + "X2AbilityCostEditor_HeavyWeaponActionPoints", + "X2AbilityCostEditor_QuickdrawActionPoints", + "X2AbilityCostEditor_ActionPoints", + "X2AbilityCostEditor_Base" + ], + "intro": "Edits the `AbilityCosts` array of the template. Costs are edited **in place** when a cost of the given `Class` already exists; otherwise behaviour depends on the modes below. Fields you do not `Set` keep their current value.", + "editors": [ + { + "class": "X2AbilityCostEditor_Ammo", + "extends": "X2AbilityCostEditor", + "gameClass": "X2AbilityCost_Ammo", + "catchAll": false, + "fields": [ + { + "config": "FreeCost", + "type": "bool", + "kind": "scalar", + "gameField": "bFreeCost", + "origin": "base", + "inheritedFrom": "X2AbilityCostEditor", + "description": "", + "guard": "SetFreeCost" + }, + { + "config": "NumAmmo", + "type": "int", + "kind": "scalar", + "gameField": "iAmmo", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumAmmo" + }, + { + "config": "UseLoadedAmmo", + "type": "bool", + "kind": "scalar", + "gameField": "UseLoadedAmmo", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseLoadedAmmo" + }, + { + "config": "ReturnChargesError", + "type": "bool", + "kind": "scalar", + "gameField": "bReturnChargesError", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetReturnChargesError" + }, + { + "config": "ConsumeAllAmmo", + "type": "bool", + "kind": "scalar", + "gameField": "bConsumeAllAmmo", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConsumeAllAmmo" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCostEditor_Charges", + "extends": "X2AbilityCostEditor", + "gameClass": "X2AbilityCost_Charges", + "catchAll": false, + "fields": [ + { + "config": "FreeCost", + "type": "bool", + "kind": "scalar", + "gameField": "bFreeCost", + "origin": "base", + "inheritedFrom": "X2AbilityCostEditor", + "description": "", + "guard": "SetFreeCost" + }, + { + "config": "NumCharges", + "type": "int", + "kind": "scalar", + "gameField": "NumCharges", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumCharges" + }, + { + "config": "OnlyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyOnHit", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyOnHit" + }, + { + "config": "AlsoExpendChargesOnSharedBondmateAbility", + "type": "bool", + "kind": "scalar", + "gameField": "bAlsoExpendChargesOnSharedBondmateAbility", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAlsoExpendChargesOnSharedBondmateAbility" + }, + { + "config": "SharedAbilityCharges", + "type": "array", + "kind": "namearray", + "gameField": "SharedAbilityCharges", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "SharedAbilityChargesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCostEditor_ConsumeItem", + "extends": "X2AbilityCostEditor", + "gameClass": "X2AbilityCost_ConsumeItem", + "catchAll": false, + "fields": [ + { + "config": "FreeCost", + "type": "bool", + "kind": "scalar", + "gameField": "bFreeCost", + "origin": "base", + "inheritedFrom": "X2AbilityCostEditor", + "description": "", + "guard": "SetFreeCost" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCostEditor_Focus", + "extends": "X2AbilityCostEditor", + "gameClass": "X2AbilityCost_Focus", + "catchAll": false, + "fields": [ + { + "config": "FreeCost", + "type": "bool", + "kind": "scalar", + "gameField": "bFreeCost", + "origin": "base", + "inheritedFrom": "X2AbilityCostEditor", + "description": "", + "guard": "SetFreeCost" + }, + { + "config": "FocusAmount", + "type": "int", + "kind": "scalar", + "gameField": "FocusAmount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFocusAmount" + }, + { + "config": "ConsumeAllFocus", + "type": "bool", + "kind": "scalar", + "gameField": "ConsumeAllFocus", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConsumeAllFocus" + }, + { + "config": "GhostOnlyCost", + "type": "bool", + "kind": "scalar", + "gameField": "GhostOnlyCost", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetGhostOnlyCost" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCostEditor_ReserveActionPoints", + "extends": "X2AbilityCostEditor", + "gameClass": "X2AbilityCost_ReserveActionPoints", + "catchAll": false, + "fields": [ + { + "config": "FreeCost", + "type": "bool", + "kind": "scalar", + "gameField": "bFreeCost", + "origin": "base", + "inheritedFrom": "X2AbilityCostEditor", + "description": "", + "guard": "SetFreeCost" + }, + { + "config": "NumPoints", + "type": "int", + "kind": "scalar", + "gameField": "iNumPoints", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumPoints" + }, + { + "config": "ConsumeAllPoints", + "type": "bool", + "kind": "scalar", + "gameField": "bConsumeAllPoints", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConsumeAllPoints" + }, + { + "config": "AllowedTypes", + "type": "array", + "kind": "namearray", + "gameField": "AllowedTypes", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "AllowedTypesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCostEditor_HeavyWeaponActionPoints", + "extends": "X2AbilityCostEditor_ActionPoints", + "gameClass": "X2AbilityCost_HeavyWeaponActionPoints", + "catchAll": false, + "fields": [ + { + "config": "FreeCost", + "type": "bool", + "kind": "scalar", + "gameField": "bFreeCost", + "origin": "base", + "inheritedFrom": "X2AbilityCostEditor", + "description": "", + "guard": "SetFreeCost" + }, + { + "config": "NumPoints", + "type": "int", + "kind": "scalar", + "gameField": "iNumPoints", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "guard": "SetNumPoints" + }, + { + "config": "ConsumeAllPoints", + "type": "bool", + "kind": "scalar", + "gameField": "bConsumeAllPoints", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "guard": "SetConsumeAllPoints" + }, + { + "config": "AddWeaponTypicalCost", + "type": "bool", + "kind": "scalar", + "gameField": "bAddWeaponTypicalCost", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "guard": "SetAddWeaponTypicalCost" + }, + { + "config": "MoveCost", + "type": "bool", + "kind": "scalar", + "gameField": "bMoveCost", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "guard": "SetMoveCost" + }, + { + "config": "AllowedTypes", + "type": "array", + "kind": "namearray", + "gameField": "AllowedTypes", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "modeField": "AllowedTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "DoNotConsumeAllEffects", + "type": "array", + "kind": "namearray", + "gameField": "DoNotConsumeAllEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "modeField": "DoNotConsumeAllEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "DoNotConsumeAllSoldierAbilities", + "type": "array", + "kind": "namearray", + "gameField": "DoNotConsumeAllSoldierAbilities", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "modeField": "DoNotConsumeAllSoldierAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCostEditor_QuickdrawActionPoints", + "extends": "X2AbilityCostEditor_ActionPoints", + "gameClass": "X2AbilityCost_QuickdrawActionPoints", + "catchAll": false, + "fields": [ + { + "config": "FreeCost", + "type": "bool", + "kind": "scalar", + "gameField": "bFreeCost", + "origin": "base", + "inheritedFrom": "X2AbilityCostEditor", + "description": "", + "guard": "SetFreeCost" + }, + { + "config": "NumPoints", + "type": "int", + "kind": "scalar", + "gameField": "iNumPoints", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "guard": "SetNumPoints" + }, + { + "config": "ConsumeAllPoints", + "type": "bool", + "kind": "scalar", + "gameField": "bConsumeAllPoints", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "guard": "SetConsumeAllPoints" + }, + { + "config": "AddWeaponTypicalCost", + "type": "bool", + "kind": "scalar", + "gameField": "bAddWeaponTypicalCost", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "guard": "SetAddWeaponTypicalCost" + }, + { + "config": "MoveCost", + "type": "bool", + "kind": "scalar", + "gameField": "bMoveCost", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "guard": "SetMoveCost" + }, + { + "config": "AllowedTypes", + "type": "array", + "kind": "namearray", + "gameField": "AllowedTypes", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "modeField": "AllowedTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "DoNotConsumeAllEffects", + "type": "array", + "kind": "namearray", + "gameField": "DoNotConsumeAllEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "modeField": "DoNotConsumeAllEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "DoNotConsumeAllSoldierAbilities", + "type": "array", + "kind": "namearray", + "gameField": "DoNotConsumeAllSoldierAbilities", + "origin": "derived", + "inheritedFrom": "X2AbilityCostEditor_ActionPoints", + "description": "", + "modeField": "DoNotConsumeAllSoldierAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCostEditor_ActionPoints", + "extends": "X2AbilityCostEditor", + "gameClass": "X2AbilityCost_ActionPoints", + "catchAll": false, + "fields": [ + { + "config": "FreeCost", + "type": "bool", + "kind": "scalar", + "gameField": "bFreeCost", + "origin": "base", + "inheritedFrom": "X2AbilityCostEditor", + "description": "", + "guard": "SetFreeCost" + }, + { + "config": "NumPoints", + "type": "int", + "kind": "scalar", + "gameField": "iNumPoints", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumPoints" + }, + { + "config": "ConsumeAllPoints", + "type": "bool", + "kind": "scalar", + "gameField": "bConsumeAllPoints", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConsumeAllPoints" + }, + { + "config": "AddWeaponTypicalCost", + "type": "bool", + "kind": "scalar", + "gameField": "bAddWeaponTypicalCost", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAddWeaponTypicalCost" + }, + { + "config": "MoveCost", + "type": "bool", + "kind": "scalar", + "gameField": "bMoveCost", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMoveCost" + }, + { + "config": "AllowedTypes", + "type": "array", + "kind": "namearray", + "gameField": "AllowedTypes", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "AllowedTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "DoNotConsumeAllEffects", + "type": "array", + "kind": "namearray", + "gameField": "DoNotConsumeAllEffects", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "DoNotConsumeAllEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "DoNotConsumeAllSoldierAbilities", + "type": "array", + "kind": "namearray", + "gameField": "DoNotConsumeAllSoldierAbilities", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "DoNotConsumeAllSoldierAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCostEditor_Base", + "extends": "X2AbilityCostEditor", + "gameClass": null, + "catchAll": true, + "fields": [ + { + "config": "FreeCost", + "type": "bool", + "kind": "scalar", + "gameField": "bFreeCost", + "origin": "base", + "inheritedFrom": "X2AbilityCostEditor", + "description": "", + "guard": "SetFreeCost" + } + ] + } + ] + }, + { + "name": "Cooldown", + "configKey": "Cooldown", + "editStruct": "CooldownEdit", + "wired": true, + "dispatchOrder": [ + "X2AbilityCooldownEditor_AidProtocol", + "X2AbilityCooldownEditor_PerPlayerType", + "X2AbilityCooldownEditor_LocalAndGlobal", + "X2AbilityCooldownEditor_Global", + "X2AbilityCooldownEditor_Rend", + "X2AbilityCooldownEditor_Base" + ], + "intro": "Edits the template's `AbilityCooldown`. With `Class` **omitted**, the existing cooldown is edited **in place** (no-op if the ability has none). With `Class` set, the existing cooldown is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class's default value.", + "editors": [ + { + "class": "X2AbilityCooldownEditor_AidProtocol", + "extends": "X2AbilityCooldownEditor", + "gameClass": "X2AbilityCooldown_AidProtocol", + "catchAll": false, + "fields": [ + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "IgnoreOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bDoNotApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetIgnoreOnHit" + }, + { + "config": "AdditionalCooldowns", + "type": "array", + "kind": "nested", + "gameField": "AditionalAbilityCooldowns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "modeField": "AdditionalCooldownMode", + "modeEnum": "EAdditionalCooldownEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCooldownEditor_PerPlayerType", + "extends": "X2AbilityCooldownEditor_LocalAndGlobal", + "gameClass": "X2AbilityCooldown_PerPlayerType", + "catchAll": false, + "fields": [ + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "IgnoreOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bDoNotApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetIgnoreOnHit" + }, + { + "config": "AdditionalCooldowns", + "type": "array", + "kind": "nested", + "gameField": "AditionalAbilityCooldowns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "modeField": "AdditionalCooldownMode", + "modeEnum": "EAdditionalCooldownEditMode" + }, + { + "config": "NumTurnsForAI", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurnsForAI", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumTurnsForAI" + }, + { + "config": "NumGlobalTurns", + "type": "int", + "kind": "scalar", + "gameField": "NumGlobalTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityCooldownEditor_LocalAndGlobal", + "description": "", + "guard": "SetNumGlobalTurns" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCooldownEditor_LocalAndGlobal", + "extends": "X2AbilityCooldownEditor", + "gameClass": "X2AbilityCooldown_LocalAndGlobal", + "catchAll": false, + "fields": [ + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "IgnoreOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bDoNotApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetIgnoreOnHit" + }, + { + "config": "AdditionalCooldowns", + "type": "array", + "kind": "nested", + "gameField": "AditionalAbilityCooldowns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "modeField": "AdditionalCooldownMode", + "modeEnum": "EAdditionalCooldownEditMode" + }, + { + "config": "NumGlobalTurns", + "type": "int", + "kind": "scalar", + "gameField": "NumGlobalTurns", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumGlobalTurns" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCooldownEditor_Global", + "extends": "X2AbilityCooldownEditor", + "gameClass": "X2AbilityCooldown_Global", + "catchAll": false, + "fields": [ + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "IgnoreOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bDoNotApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetIgnoreOnHit" + }, + { + "config": "AdditionalCooldowns", + "type": "array", + "kind": "nested", + "gameField": "AditionalAbilityCooldowns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "modeField": "AdditionalCooldownMode", + "modeEnum": "EAdditionalCooldownEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCooldownEditor_Rend", + "extends": "X2AbilityCooldownEditor", + "gameClass": "X2AbilityCooldown_Rend", + "catchAll": false, + "fields": [ + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "IgnoreOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bDoNotApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetIgnoreOnHit" + }, + { + "config": "AdditionalCooldowns", + "type": "array", + "kind": "nested", + "gameField": "AditionalAbilityCooldowns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "modeField": "AdditionalCooldownMode", + "modeEnum": "EAdditionalCooldownEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityCooldownEditor_Base", + "extends": "X2AbilityCooldownEditor", + "gameClass": null, + "catchAll": true, + "fields": [ + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "IgnoreOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bDoNotApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "guard": "SetIgnoreOnHit" + }, + { + "config": "AdditionalCooldowns", + "type": "array", + "kind": "nested", + "gameField": "AditionalAbilityCooldowns", + "origin": "base", + "inheritedFrom": "X2AbilityCooldownEditor", + "description": "", + "modeField": "AdditionalCooldownMode", + "modeEnum": "EAdditionalCooldownEditMode" + } + ] + } + ] + }, + { + "name": "Charges", + "configKey": "Charges", + "editStruct": "ChargesEdit", + "wired": true, + "dispatchOrder": [ + "X2AbilityChargesEditor_CocoonSpawnChryssalid", + "X2AbilityChargesEditor_GremlinHeal", + "X2AbilityChargesEditor_RevivalProtocol", + "X2AbilityChargesEditor_ScanningProtocol", + "X2AbilityChargesEditor_StasisLance", + "X2AbilityChargesEditor_Base" + ], + "intro": "Edits the template's `AbilityCharges`. With `Class` **omitted**, the existing charges object is edited **in place** (no-op if the ability has none). With `Class` set, the existing object is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class's default value. `RemoveCharges=true` removes the charges object entirely.", + "editors": [ + { + "class": "X2AbilityChargesEditor_CocoonSpawnChryssalid", + "extends": "X2AbilityChargesEditor", + "gameClass": "X2AbilityCharges_CocoonSpawnChryssalid", + "catchAll": false, + "fields": [ + { + "config": "InitialCharges", + "type": "int", + "kind": "scalar", + "gameField": "InitialCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "guard": "SetInitialCharges" + }, + { + "config": "BonusCharges", + "type": "array", + "kind": "nested", + "gameField": "BonusCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "modeField": "BonusChargesMode", + "modeEnum": "EChargesBonusMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityChargesEditor_GremlinHeal", + "extends": "X2AbilityChargesEditor", + "gameClass": "X2AbilityCharges_GremlinHeal", + "catchAll": false, + "fields": [ + { + "config": "InitialCharges", + "type": "int", + "kind": "scalar", + "gameField": "InitialCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "guard": "SetInitialCharges" + }, + { + "config": "BonusCharges", + "type": "array", + "kind": "nested", + "gameField": "BonusCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "modeField": "BonusChargesMode", + "modeEnum": "EChargesBonusMode" + }, + { + "config": "Stabilize", + "type": "bool", + "kind": "scalar", + "gameField": "bStabilize", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStabilize" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityChargesEditor_RevivalProtocol", + "extends": "X2AbilityChargesEditor", + "gameClass": "X2AbilityCharges_RevivalProtocol", + "catchAll": false, + "fields": [ + { + "config": "InitialCharges", + "type": "int", + "kind": "scalar", + "gameField": "InitialCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "guard": "SetInitialCharges" + }, + { + "config": "BonusCharges", + "type": "array", + "kind": "nested", + "gameField": "BonusCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "modeField": "BonusChargesMode", + "modeEnum": "EChargesBonusMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityChargesEditor_ScanningProtocol", + "extends": "X2AbilityChargesEditor", + "gameClass": "X2AbilityCharges_ScanningProtocol", + "catchAll": false, + "fields": [ + { + "config": "InitialCharges", + "type": "int", + "kind": "scalar", + "gameField": "InitialCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "guard": "SetInitialCharges" + }, + { + "config": "BonusCharges", + "type": "array", + "kind": "nested", + "gameField": "BonusCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "modeField": "BonusChargesMode", + "modeEnum": "EChargesBonusMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityChargesEditor_StasisLance", + "extends": "X2AbilityChargesEditor", + "gameClass": "X2AbilityCharges_StasisLance", + "catchAll": false, + "fields": [ + { + "config": "InitialCharges", + "type": "int", + "kind": "scalar", + "gameField": "InitialCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "guard": "SetInitialCharges" + }, + { + "config": "BonusCharges", + "type": "array", + "kind": "nested", + "gameField": "BonusCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "modeField": "BonusChargesMode", + "modeEnum": "EChargesBonusMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityChargesEditor_Base", + "extends": "X2AbilityChargesEditor", + "gameClass": null, + "catchAll": true, + "fields": [ + { + "config": "InitialCharges", + "type": "int", + "kind": "scalar", + "gameField": "InitialCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "guard": "SetInitialCharges" + }, + { + "config": "BonusCharges", + "type": "array", + "kind": "nested", + "gameField": "BonusCharges", + "origin": "base", + "inheritedFrom": "X2AbilityChargesEditor", + "description": "", + "modeField": "BonusChargesMode", + "modeEnum": "EChargesBonusMode" + } + ] + } + ] + }, + { + "name": "Effects", + "configKey": "Effects", + "editStruct": "EffectEdit", + "wired": true, + "dispatchOrder": [ + "X2AbilityEffectsEditor_Obsessed", + "X2AbilityEffectsEditor_Shattered", + "X2AbilityEffectsEditor_VanishingWind", + "X2AbilityEffectsEditor_KineticPlating", + "X2AbilityEffectsEditor_Vanish", + "X2AbilityEffectsEditor_BlastPadding", + "X2AbilityEffectsEditor_KillUnit", + "X2AbilityEffectsEditor_ParthenogenicPoison", + "X2AbilityEffectsEditor_PersistentStatChange", + "X2AbilityEffectsEditor_PersistentStatChangeRestoreDefault", + "X2AbilityEffectsEditor_SpawnPsiZombie", + "X2AbilityEffectsEditor_SpawnShadowbindUnit", + "X2AbilityEffectsEditor_ThreatAssessment", + "X2AbilityEffectsEditor_WallBreaking", + "X2AbilityEffectsEditor_Achilles", + "X2AbilityEffectsEditor_AdverseSoldierClasses", + "X2AbilityEffectsEditor_Amplify", + "X2AbilityEffectsEditor_ApplyBlazingPinionsTargetToWorld", + "X2AbilityEffectsEditor_ApplyFireToWorld", + "X2AbilityEffectsEditor_APRounds", + "X2AbilityEffectsEditor_Aura", + "X2AbilityEffectsEditor_Bewildered", + "X2AbilityEffectsEditor_BloodTrail", + "X2AbilityEffectsEditor_BonusArmor", + "X2AbilityEffectsEditor_BonusWeaponDamage", + "X2AbilityEffectsEditor_ConditionalDamageModifier", + "X2AbilityEffectsEditor_CoveringFire", + "X2AbilityEffectsEditor_DamageImmunity", + "X2AbilityEffectsEditor_DelayedAbilityActivation", + "X2AbilityEffectsEditor_FaceMultiRoundTarget", + "X2AbilityEffectsEditor_GenerateCover", + "X2AbilityEffectsEditor_Groundling", + "X2AbilityEffectsEditor_Guardian", + "X2AbilityEffectsEditor_HoloTarget", + "X2AbilityEffectsEditor_HolyWarriorDeath", + "X2AbilityEffectsEditor_HomingMine", + "X2AbilityEffectsEditor_HuntersInstinctDamage", + "X2AbilityEffectsEditor_ImmediateAbilityActivation", + "X2AbilityEffectsEditor_Impatient", + "X2AbilityEffectsEditor_Implacable", + "X2AbilityEffectsEditor_LaserSight", + "X2AbilityEffectsEditor_MeleeDamageAdjust", + "X2AbilityEffectsEditor_MindControl", + "X2AbilityEffectsEditor_ModifyReactionFire", + "X2AbilityEffectsEditor_ModifyStats", + "X2AbilityEffectsEditor_Nearsighted", + "X2AbilityEffectsEditor_Needle", + "X2AbilityEffectsEditor_Oblivious", + "X2AbilityEffectsEditor_OverrideDeathAnimOnLoad", + "X2AbilityEffectsEditor_PaleHorse", + "X2AbilityEffectsEditor_PersistentSquadViewer", + "X2AbilityEffectsEditor_PersistentTraversalChange", + "X2AbilityEffectsEditor_PersistentVoidConduit", + "X2AbilityEffectsEditor_Possessed", + "X2AbilityEffectsEditor_Reaper", + "X2AbilityEffectsEditor_Regeneration", + "X2AbilityEffectsEditor_RemoveEffectsByDamageType", + "X2AbilityEffectsEditor_ReserveOverwatchPoints", + "X2AbilityEffectsEditor_RunBehaviorTree", + "X2AbilityEffectsEditor_ScanningProtocol", + "X2AbilityEffectsEditor_SmokeGrenade", + "X2AbilityEffectsEditor_SpawnDestructible", + "X2AbilityEffectsEditor_SpawnUnit", + "X2AbilityEffectsEditor_Stasis", + "X2AbilityEffectsEditor_Stunned", + "X2AbilityEffectsEditor_SuperConcealModifier", + "X2AbilityEffectsEditor_Sustain", + "X2AbilityEffectsEditor_Sustained", + "X2AbilityEffectsEditor_TalonRounds", + "X2AbilityEffectsEditor_TargetDamageDistanceBonus", + "X2AbilityEffectsEditor_TargetDamageTypeBonus", + "X2AbilityEffectsEditor_ToHitModifier", + "X2AbilityEffectsEditor_TrackingShotMarkTarget", + "X2AbilityEffectsEditor_TurnStartActionPoints", + "X2AbilityEffectsEditor_VolatileMix", + "X2AbilityEffectsEditor_ApplyDirectionalWorldDamage", + "X2AbilityEffectsEditor_ApplyMedikitHeal", + "X2AbilityEffectsEditor_ApplyWeaponDamage", + "X2AbilityEffectsEditor_Brutal", + "X2AbilityEffectsEditor_EnableGlobalAbility", + "X2AbilityEffectsEditor_GetOverHere", + "X2AbilityEffectsEditor_GrantActionPoints", + "X2AbilityEffectsEditor_IncreaseBondmateCohesion", + "X2AbilityEffectsEditor_Knockback", + "X2AbilityEffectsEditor_LifeSteal", + "X2AbilityEffectsEditor_MarkValidActivationTiles", + "X2AbilityEffectsEditor_ModifyInitiativeOrder", + "X2AbilityEffectsEditor_ModifyTemplarFocus", + "X2AbilityEffectsEditor_LethalWeaponDamage", + "X2AbilityEffectsEditor_Persistent", + "X2AbilityEffectsEditor_ReduceCooldowns", + "X2AbilityEffectsEditor_RemoteStart", + "X2AbilityEffectsEditor_RemoveEffects", + "X2AbilityEffectsEditor_ReserveActionPoints", + "X2AbilityEffectsEditor_SetUnitValue", + "X2AbilityEffectsEditor_SoulSteal", + "X2AbilityEffectsEditor_Spotted", + "X2AbilityEffectsEditor_SuspendMissionTimer", + "X2AbilityEffectsEditor_TriggerEvent", + "X2AbilityEffectsEditor_VoidConduit", + "X2AbilityEffectsEditor_World", + "X2AbilityEffectsEditor_Base" + ], + "intro": "Edits the effect arrays of the template. `Slot` selects which array is edited (see `EAbilityEffectSlot`). Within the selected array the effect of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`.", + "editors": [ + { + "class": "X2AbilityEffectsEditor_Obsessed", + "extends": "X2AbilityEffectsEditor_PersistentStatChange", + "gameClass": "X2Effect_Obsessed", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ObsessedTargetValueName", + "type": "Name", + "kind": "scalar", + "gameField": "ObsessedTargetValueName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetObsessedTargetValueName" + }, + { + "config": "CHLForceReapplyOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bForceReapplyOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "guard": "SetCHLForceReapplyOnRefresh" + }, + { + "config": "StatChange", + "type": "array", + "kind": "nested", + "gameField": "m_aStatChanges", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "modeField": "StatChangeMode", + "modeEnum": "EStatChangeMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Shattered", + "extends": "X2AbilityEffectsEditor_PersistentStatChange", + "gameClass": "X2Effect_Shattered", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ShatteredTargetValueName", + "type": "Name", + "kind": "scalar", + "gameField": "ShatteredTargetValueName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetShatteredTargetValueName" + }, + { + "config": "CHLForceReapplyOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bForceReapplyOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "guard": "SetCHLForceReapplyOnRefresh" + }, + { + "config": "StatChange", + "type": "array", + "kind": "nested", + "gameField": "m_aStatChanges", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "modeField": "StatChangeMode", + "modeEnum": "EStatChangeMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_VanishingWind", + "extends": "X2AbilityEffectsEditor_Vanish", + "gameClass": "X2Effect_VanishingWind", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "MovingVanishRevealAdditiveAnimName", + "type": "name", + "kind": "scalar", + "gameField": "MovingVanishRevealAdditiveAnimName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMovingVanishRevealAdditiveAnimName" + }, + { + "config": "ReasonNotVisible", + "type": "name", + "kind": "scalar", + "gameField": "ReasonNotVisible", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Vanish", + "description": "", + "guard": "SetReasonNotVisible" + }, + { + "config": "VanishRevealAdditiveAnimName", + "type": "name", + "kind": "scalar", + "gameField": "VanishRevealAdditiveAnimName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Vanish", + "description": "", + "guard": "SetVanishRevealAdditiveAnimName" + }, + { + "config": "VanishRevealAnimName", + "type": "name", + "kind": "scalar", + "gameField": "VanishRevealAnimName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Vanish", + "description": "", + "guard": "SetVanishRevealAnimName" + }, + { + "config": "VanishSyncAnimName", + "type": "name", + "kind": "scalar", + "gameField": "VanishSyncAnimName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Vanish", + "description": "", + "guard": "SetVanishSyncAnimName" + }, + { + "config": "CHLForceReapplyOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bForceReapplyOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "guard": "SetCHLForceReapplyOnRefresh" + }, + { + "config": "StatChange", + "type": "array", + "kind": "nested", + "gameField": "m_aStatChanges", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "modeField": "StatChangeMode", + "modeEnum": "EStatChangeMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_KineticPlating", + "extends": "X2AbilityEffectsEditor_PersistentStatChange", + "gameClass": "X2Effect_KineticPlating", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ShieldPerMiss", + "type": "int", + "kind": "scalar", + "gameField": "ShieldPerMiss", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetShieldPerMiss" + }, + { + "config": "CHLForceReapplyOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bForceReapplyOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "guard": "SetCHLForceReapplyOnRefresh" + }, + { + "config": "StatChange", + "type": "array", + "kind": "nested", + "gameField": "m_aStatChanges", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "modeField": "StatChangeMode", + "modeEnum": "EStatChangeMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Vanish", + "extends": "X2AbilityEffectsEditor_PersistentStatChange", + "gameClass": "X2Effect_Vanish", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ReasonNotVisible", + "type": "name", + "kind": "scalar", + "gameField": "ReasonNotVisible", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetReasonNotVisible" + }, + { + "config": "VanishRevealAdditiveAnimName", + "type": "name", + "kind": "scalar", + "gameField": "VanishRevealAdditiveAnimName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetVanishRevealAdditiveAnimName" + }, + { + "config": "VanishRevealAnimName", + "type": "name", + "kind": "scalar", + "gameField": "VanishRevealAnimName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetVanishRevealAnimName" + }, + { + "config": "VanishSyncAnimName", + "type": "name", + "kind": "scalar", + "gameField": "VanishSyncAnimName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetVanishSyncAnimName" + }, + { + "config": "CHLForceReapplyOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bForceReapplyOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "guard": "SetCHLForceReapplyOnRefresh" + }, + { + "config": "StatChange", + "type": "array", + "kind": "nested", + "gameField": "m_aStatChanges", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentStatChange", + "description": "", + "modeField": "StatChangeMode", + "modeEnum": "EStatChangeMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_BlastPadding", + "extends": "X2AbilityEffectsEditor_BonusArmor", + "gameClass": "X2Effect_BlastPadding", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ExplosiveDamageReduction", + "type": "float", + "kind": "scalar", + "gameField": "ExplosiveDamageReduction", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExplosiveDamageReduction" + }, + { + "config": "ArmorMitigationAmount", + "type": "int", + "kind": "scalar", + "gameField": "ArmorMitigationAmount", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_BonusArmor", + "description": "", + "guard": "SetArmorMitigationAmount" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_KillUnit", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_KillUnit", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ParthenogenicPoison", + "extends": "X2AbilityEffectsEditor_SpawnUnit", + "gameClass": "X2Effect_ParthenogenicPoison", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ParthenogenicPoisonType", + "type": "name", + "kind": "scalar", + "gameField": "ParthenogenicPoisonType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetParthenogenicPoisonType" + }, + { + "config": "ParthenogenicPoisonCocoonSpawnedName", + "type": "name", + "kind": "scalar", + "gameField": "ParthenogenicPoisonCocoonSpawnedName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetParthenogenicPoisonCocoonSpawnedName" + }, + { + "config": "AltUnitToSpawnName", + "type": "name", + "kind": "scalar", + "gameField": "AltUnitToSpawnName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAltUnitToSpawnName" + }, + { + "config": "UnitToSpawnName", + "type": "name", + "kind": "scalar", + "gameField": "UnitToSpawnName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetUnitToSpawnName" + }, + { + "config": "ClearTileBlockedByTargetUnitFlag", + "type": "bool", + "kind": "scalar", + "gameField": "bClearTileBlockedByTargetUnitFlag", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetClearTileBlockedByTargetUnitFlag" + }, + { + "config": "CopyTargetAppearance", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyTargetAppearance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopyTargetAppearance" + }, + { + "config": "CopySourceAppearance", + "type": "bool", + "kind": "scalar", + "gameField": "bCopySourceAppearance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopySourceAppearance" + }, + { + "config": "KnockbackAffectsSpawnLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bKnockbackAffectsSpawnLocation", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetKnockbackAffectsSpawnLocation" + }, + { + "config": "AddToSourceGroup", + "type": "bool", + "kind": "scalar", + "gameField": "bAddToSourceGroup", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetAddToSourceGroup" + }, + { + "config": "CopyReanimatedFromUnit", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyReanimatedFromUnit", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopyReanimatedFromUnit" + }, + { + "config": "CopyReanimatedStatsFromUnit", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyReanimatedStatsFromUnit", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopyReanimatedStatsFromUnit" + }, + { + "config": "SetProcessedScamperAs", + "type": "bool", + "kind": "scalar", + "gameField": "bSetProcessedScamperAs", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetSetProcessedScamperAs" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_PersistentStatChange", + "extends": "X2AbilityEffectsEditor_ModifyStats", + "gameClass": "X2Effect_PersistentStatChange", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "CHLForceReapplyOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bForceReapplyOnRefresh", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCHLForceReapplyOnRefresh" + }, + { + "config": "StatChange", + "type": "array", + "kind": "nested", + "gameField": "m_aStatChanges", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "StatChangeMode", + "modeEnum": "EStatChangeMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_PersistentStatChangeRestoreDefault", + "extends": "X2AbilityEffectsEditor_ModifyStats", + "gameClass": "X2Effect_PersistentStatChangeRestoreDefault", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "StatTypesToRestore", + "type": "array", + "kind": "namearray", + "gameField": "StatTypesToRestore", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "StatTypesToRestoreMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_SpawnPsiZombie", + "extends": "X2AbilityEffectsEditor_SpawnUnit", + "gameClass": "X2Effect_SpawnPsiZombie", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "AnimationName", + "type": "name", + "kind": "scalar", + "gameField": "AnimationName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAnimationName" + }, + { + "config": "AltUnitToSpawnName", + "type": "name", + "kind": "scalar", + "gameField": "AltUnitToSpawnName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAltUnitToSpawnName" + }, + { + "config": "StartAnimationMinDelaySec", + "type": "float", + "kind": "scalar", + "gameField": "StartAnimationMinDelaySec", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStartAnimationMinDelaySec" + }, + { + "config": "StartAnimationMaxDelaySec", + "type": "float", + "kind": "scalar", + "gameField": "StartAnimationMaxDelaySec", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStartAnimationMaxDelaySec" + }, + { + "config": "UnitToSpawnName", + "type": "name", + "kind": "scalar", + "gameField": "UnitToSpawnName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetUnitToSpawnName" + }, + { + "config": "ClearTileBlockedByTargetUnitFlag", + "type": "bool", + "kind": "scalar", + "gameField": "bClearTileBlockedByTargetUnitFlag", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetClearTileBlockedByTargetUnitFlag" + }, + { + "config": "CopyTargetAppearance", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyTargetAppearance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopyTargetAppearance" + }, + { + "config": "CopySourceAppearance", + "type": "bool", + "kind": "scalar", + "gameField": "bCopySourceAppearance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopySourceAppearance" + }, + { + "config": "KnockbackAffectsSpawnLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bKnockbackAffectsSpawnLocation", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetKnockbackAffectsSpawnLocation" + }, + { + "config": "AddToSourceGroup", + "type": "bool", + "kind": "scalar", + "gameField": "bAddToSourceGroup", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetAddToSourceGroup" + }, + { + "config": "CopyReanimatedFromUnit", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyReanimatedFromUnit", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopyReanimatedFromUnit" + }, + { + "config": "CopyReanimatedStatsFromUnit", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyReanimatedStatsFromUnit", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopyReanimatedStatsFromUnit" + }, + { + "config": "SetProcessedScamperAs", + "type": "bool", + "kind": "scalar", + "gameField": "bSetProcessedScamperAs", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetSetProcessedScamperAs" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_SpawnShadowbindUnit", + "extends": "X2AbilityEffectsEditor_SpawnUnit", + "gameClass": "X2Effect_SpawnShadowbindUnit", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ShadowbindUnconciousCheckName", + "type": "name", + "kind": "scalar", + "gameField": "ShadowbindUnconciousCheckName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetShadowbindUnconciousCheckName" + }, + { + "config": "UnitToSpawnName", + "type": "name", + "kind": "scalar", + "gameField": "UnitToSpawnName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetUnitToSpawnName" + }, + { + "config": "ClearTileBlockedByTargetUnitFlag", + "type": "bool", + "kind": "scalar", + "gameField": "bClearTileBlockedByTargetUnitFlag", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetClearTileBlockedByTargetUnitFlag" + }, + { + "config": "CopyTargetAppearance", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyTargetAppearance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopyTargetAppearance" + }, + { + "config": "CopySourceAppearance", + "type": "bool", + "kind": "scalar", + "gameField": "bCopySourceAppearance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopySourceAppearance" + }, + { + "config": "KnockbackAffectsSpawnLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bKnockbackAffectsSpawnLocation", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetKnockbackAffectsSpawnLocation" + }, + { + "config": "AddToSourceGroup", + "type": "bool", + "kind": "scalar", + "gameField": "bAddToSourceGroup", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetAddToSourceGroup" + }, + { + "config": "CopyReanimatedFromUnit", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyReanimatedFromUnit", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopyReanimatedFromUnit" + }, + { + "config": "CopyReanimatedStatsFromUnit", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyReanimatedStatsFromUnit", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetCopyReanimatedStatsFromUnit" + }, + { + "config": "SetProcessedScamperAs", + "type": "bool", + "kind": "scalar", + "gameField": "bSetProcessedScamperAs", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_SpawnUnit", + "description": "", + "guard": "SetSetProcessedScamperAs" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ThreatAssessment", + "extends": "X2AbilityEffectsEditor_CoveringFire", + "gameClass": "X2Effect_ThreatAssessment", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ImmediateActionPoint", + "type": "name", + "kind": "scalar", + "gameField": "ImmediateActionPoint", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetImmediateActionPoint" + }, + { + "config": "AbilityToActivate", + "type": "name", + "kind": "scalar", + "gameField": "AbilityToActivate", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetAbilityToActivate" + }, + { + "config": "GrantActionPoint", + "type": "name", + "kind": "scalar", + "gameField": "GrantActionPoint", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetGrantActionPoint" + }, + { + "config": "MaxPointsPerTurn", + "type": "int", + "kind": "scalar", + "gameField": "MaxPointsPerTurn", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetMaxPointsPerTurn" + }, + { + "config": "DirectAttackOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDirectAttackOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetDirectAttackOnly" + }, + { + "config": "PreEmptiveFire", + "type": "bool", + "kind": "scalar", + "gameField": "bPreEmptiveFire", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetPreEmptiveFire" + }, + { + "config": "OnlyDuringEnemyTurn", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyDuringEnemyTurn", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetOnlyDuringEnemyTurn" + }, + { + "config": "UseMultiTargets", + "type": "bool", + "kind": "scalar", + "gameField": "bUseMultiTargets", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetUseMultiTargets" + }, + { + "config": "OnlyWhenAttackMisses", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyWhenAttackMisses", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetOnlyWhenAttackMisses" + }, + { + "config": "SelfTargeting", + "type": "bool", + "kind": "scalar", + "gameField": "bSelfTargeting", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetSelfTargeting" + }, + { + "config": "ActivationPercentChance", + "type": "int", + "kind": "scalar", + "gameField": "ActivationPercentChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_CoveringFire", + "description": "", + "guard": "SetActivationPercentChance" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_WallBreaking", + "extends": "X2AbilityEffectsEditor_PersistentTraversalChange", + "gameClass": "X2Effect_WallBreaking", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "WallBreakingEffectName", + "type": "name", + "kind": "scalar", + "gameField": "WallBreakingEffectName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetWallBreakingEffectName" + }, + { + "config": "TraversalChanges", + "type": "array", + "kind": "namearray", + "gameField": "aTraversalChanges", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_PersistentTraversalChange", + "description": "", + "modeField": "TraversalChangesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Achilles", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Achilles", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ToHitMin", + "type": "int", + "kind": "scalar", + "gameField": "ToHitMin", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetToHitMin" + }, + { + "config": "DmgMod", + "type": "float", + "kind": "scalar", + "gameField": "DmgMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDmgMod" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_AdverseSoldierClasses", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_AdverseSoldierClasses", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "AdverseClasses", + "type": "array", + "kind": "namearray", + "gameField": "AdverseClasses", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "AdverseClassesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "DmgMod", + "type": "float", + "kind": "scalar", + "gameField": "DmgMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDmgMod" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Amplify", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Amplify", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "BonusDamageMult", + "type": "float", + "kind": "scalar", + "gameField": "BonusDamageMult", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusDamageMult" + }, + { + "config": "MinBonusDamage", + "type": "int", + "kind": "scalar", + "gameField": "MinBonusDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMinBonusDamage" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ApplyBlazingPinionsTargetToWorld", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_ApplyBlazingPinionsTargetToWorld", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "OverrideParticleSystemFill_Name", + "type": "string", + "kind": "scalar", + "gameField": "OverrideParticleSystemFill_Name", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOverrideParticleSystemFill_Name" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ApplyFireToWorld", + "extends": "X2AbilityEffectsEditor_World", + "gameClass": "X2Effect_ApplyFireToWorld", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "FireChance_Level1", + "type": "float", + "kind": "scalar", + "gameField": "FireChance_Level1", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFireChance_Level1" + }, + { + "config": "FireChance_Level2", + "type": "float", + "kind": "scalar", + "gameField": "FireChance_Level2", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFireChance_Level2" + }, + { + "config": "FireChance_Level3", + "type": "float", + "kind": "scalar", + "gameField": "FireChance_Level3", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFireChance_Level3" + }, + { + "config": "UseFireChanceLevel", + "type": "bool", + "kind": "scalar", + "gameField": "bUseFireChanceLevel", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseFireChanceLevel" + }, + { + "config": "DamageFragileOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDamageFragileOnly", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDamageFragileOnly" + }, + { + "config": "CheckForLOSFromTargetLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bCheckForLOSFromTargetLocation", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCheckForLOSFromTargetLocation" + }, + { + "config": "CenterTile", + "type": "bool", + "kind": "scalar", + "gameField": "bCenterTile", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_World", + "description": "", + "guard": "SetCenterTile" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_APRounds", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_APRounds", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "Pierce", + "type": "int", + "kind": "scalar", + "gameField": "Pierce", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPierce" + }, + { + "config": "CritChance", + "type": "int", + "kind": "scalar", + "gameField": "CritChance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCritChance" + }, + { + "config": "CritDamage", + "type": "int", + "kind": "scalar", + "gameField": "CritDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCritDamage" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Aura", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Aura", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "EventsToUpdate", + "type": "array", + "kind": "namearray", + "gameField": "EventsToUpdate", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "EventsToUpdateMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Bewildered", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Bewildered", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "DmgMod", + "type": "float", + "kind": "scalar", + "gameField": "DmgMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDmgMod" + }, + { + "config": "NumHitsForMod", + "type": "int", + "kind": "scalar", + "gameField": "NumHitsForMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumHitsForMod" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_BloodTrail", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_BloodTrail", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "BonusDamage", + "type": "int", + "kind": "scalar", + "gameField": "BonusDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusDamage" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_BonusArmor", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_BonusArmor", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ArmorMitigationAmount", + "type": "int", + "kind": "scalar", + "gameField": "ArmorMitigationAmount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetArmorMitigationAmount" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_BonusWeaponDamage", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_BonusWeaponDamage", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "BonusDmg", + "type": "int", + "kind": "scalar", + "gameField": "BonusDmg", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusDmg" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ConditionalDamageModifier", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_ConditionalDamageModifier", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ModifyOutgoingDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bModifyOutgoingDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetModifyOutgoingDamage" + }, + { + "config": "ModifyIncomingDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bModifyIncomingDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetModifyIncomingDamage" + }, + { + "config": "DamageModifier", + "type": "float", + "kind": "scalar", + "gameField": "DamageModifier", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDamageModifier" + }, + { + "config": "DamageBonus", + "type": "int", + "kind": "scalar", + "gameField": "DamageBonus", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDamageBonus" + }, + { + "config": "ApplyDamageModConditions", + "type": "array", + "kind": "nested", + "gameField": null, + "origin": "derived", + "inheritedFrom": null, + "description": "X2Effect_ConditionalDamageModifier" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [ + { + "name": "ApplyDamageModConditions", + "reason": "array of `X2Condition`" + } + ] + }, + { + "class": "X2AbilityEffectsEditor_CoveringFire", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_CoveringFire", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "AbilityToActivate", + "type": "name", + "kind": "scalar", + "gameField": "AbilityToActivate", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAbilityToActivate" + }, + { + "config": "GrantActionPoint", + "type": "name", + "kind": "scalar", + "gameField": "GrantActionPoint", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetGrantActionPoint" + }, + { + "config": "MaxPointsPerTurn", + "type": "int", + "kind": "scalar", + "gameField": "MaxPointsPerTurn", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMaxPointsPerTurn" + }, + { + "config": "DirectAttackOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDirectAttackOnly", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDirectAttackOnly" + }, + { + "config": "PreEmptiveFire", + "type": "bool", + "kind": "scalar", + "gameField": "bPreEmptiveFire", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPreEmptiveFire" + }, + { + "config": "OnlyDuringEnemyTurn", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyDuringEnemyTurn", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyDuringEnemyTurn" + }, + { + "config": "UseMultiTargets", + "type": "bool", + "kind": "scalar", + "gameField": "bUseMultiTargets", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseMultiTargets" + }, + { + "config": "OnlyWhenAttackMisses", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyWhenAttackMisses", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyWhenAttackMisses" + }, + { + "config": "SelfTargeting", + "type": "bool", + "kind": "scalar", + "gameField": "bSelfTargeting", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSelfTargeting" + }, + { + "config": "ActivationPercentChance", + "type": "int", + "kind": "scalar", + "gameField": "ActivationPercentChance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetActivationPercentChance" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_DamageImmunity", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_DamageImmunity", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ImmuneTypesAreInclusive", + "type": "bool", + "kind": "scalar", + "gameField": "ImmueTypesAreInclusive", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetImmuneTypesAreInclusive" + }, + { + "config": "RemoveAfterAttackCount", + "type": "int", + "kind": "scalar", + "gameField": "RemoveAfterAttackCount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRemoveAfterAttackCount" + }, + { + "config": "ImmuneTypes", + "type": "array", + "kind": "namearray", + "gameField": "ImmuneTypes", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "ImmuneTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_DelayedAbilityActivation", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_DelayedAbilityActivation", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "TriggerEventName", + "type": "name", + "kind": "scalar", + "gameField": "TriggerEventName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTriggerEventName" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_FaceMultiRoundTarget", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_FaceMultiRoundTarget", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "TriggerEventName", + "type": "name", + "kind": "scalar", + "gameField": "TriggerEventName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTriggerEventName" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_GenerateCover", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_GenerateCover", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "CoverType", + "type": "ECoverForceFlag", + "kind": "scalar", + "gameField": "CoverType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCoverType" + }, + { + "config": "RemoveWhenMoved", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenMoved", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRemoveWhenMoved" + }, + { + "config": "RemoveOnOtherActivation", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveOnOtherActivation", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRemoveOnOtherActivation" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Groundling", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Groundling", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "HeightBonus", + "type": "int", + "kind": "scalar", + "gameField": "HeightBonus", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHeightBonus" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Guardian", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Guardian", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "AllowedAbilities", + "type": "array", + "kind": "namearray", + "gameField": "AllowedAbilities", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "AllowedAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "ProcChance", + "type": "int", + "kind": "scalar", + "gameField": "ProcChance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetProcChance" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_HoloTarget", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_HoloTarget", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "HitMod", + "type": "int", + "kind": "scalar", + "gameField": "HitMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHitMod" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_HolyWarriorDeath", + "extends": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "gameClass": "X2Effect_HolyWarriorDeath", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "DelayTimeS", + "type": "float", + "kind": "scalar", + "gameField": "DelayTimeS", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDelayTimeS" + }, + { + "config": "ExplosiveDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bExplosiveDamage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetExplosiveDamage" + }, + { + "config": "IgnoreBaseDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreBaseDamage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetIgnoreBaseDamage" + }, + { + "config": "DamageTag", + "type": "name", + "kind": "scalar", + "gameField": "DamageTag", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetDamageTag" + }, + { + "config": "AlwaysKillsCivilians", + "type": "bool", + "kind": "scalar", + "gameField": "bAlwaysKillsCivilians", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetAlwaysKillsCivilians" + }, + { + "config": "ApplyWorldEffectsForEachTargetLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyWorldEffectsForEachTargetLocation", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetApplyWorldEffectsForEachTargetLocation" + }, + { + "config": "AllowFreeKill", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowFreeKill", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetAllowFreeKill" + }, + { + "config": "AllowWeaponUpgrade", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowWeaponUpgrade", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetAllowWeaponUpgrade" + }, + { + "config": "BypassShields", + "type": "bool", + "kind": "scalar", + "gameField": "bBypassShields", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetBypassShields" + }, + { + "config": "IgnoreArmor", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreArmor", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetIgnoreArmor" + }, + { + "config": "BypassSustainEffects", + "type": "bool", + "kind": "scalar", + "gameField": "bBypassSustainEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetBypassSustainEffects" + }, + { + "config": "EnvironmentalDamageAmount", + "type": "int", + "kind": "scalar", + "gameField": "EnvironmentalDamageAmount", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "", + "guard": "SetEnvironmentalDamageAmount" + }, + { + "config": "WeaponDamageValue", + "type": "WeaponDamageValueEdit", + "kind": "nested", + "gameField": "EffectDamageValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "description": "" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_HomingMine", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_HomingMine", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "AbilityToTrigger", + "type": "name", + "kind": "scalar", + "gameField": "AbilityToTrigger", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAbilityToTrigger" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_HuntersInstinctDamage", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_HuntersInstinctDamage", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "BonusDamage", + "type": "int", + "kind": "scalar", + "gameField": "BonusDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusDamage" + }, + { + "config": "BonusCritChance", + "type": "int", + "kind": "scalar", + "gameField": "BonusCritChance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusCritChance" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ImmediateAbilityActivation", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_ImmediateAbilityActivation", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "AbilityName", + "type": "name", + "kind": "scalar", + "gameField": "AbilityName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAbilityName" + }, + { + "config": "ActivateAbilityOnTarget", + "type": "bool", + "kind": "scalar", + "gameField": "ActivateAbilityOnTarget", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetActivateAbilityOnTarget" + }, + { + "config": "EffectTargetOnly", + "type": "bool", + "kind": "scalar", + "gameField": "EffectTargetOnly", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEffectTargetOnly" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Impatient", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Impatient", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "DmgMod", + "type": "float", + "kind": "scalar", + "gameField": "DmgMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDmgMod" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Implacable", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Implacable", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ImplacableThisTurnValue", + "type": "name", + "kind": "scalar", + "gameField": "ImplacableThisTurnValue", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetImplacableThisTurnValue" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_LaserSight", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_LaserSight", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "BenefitFromEmpoweredUpgrades", + "type": "bool", + "kind": "scalar", + "gameField": "bBenefitFromEmpoweredUpgrades", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBenefitFromEmpoweredUpgrades" + }, + { + "config": "CritBonus", + "type": "int", + "kind": "scalar", + "gameField": "CritBonus", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCritBonus" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_MeleeDamageAdjust", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_MeleeDamageAdjust", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "DamageMod", + "type": "int", + "kind": "scalar", + "gameField": "DamageMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDamageMod" + }, + { + "config": "MeleeDamageTypeName", + "type": "name", + "kind": "scalar", + "gameField": "MeleeDamageTypeName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMeleeDamageTypeName" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_MindControl", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_MindControl", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "NumTurnsForAI", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurnsForAI", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumTurnsForAI" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ModifyReactionFire", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_ModifyReactionFire", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "AllowCrit", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowCrit", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAllowCrit" + }, + { + "config": "ReactionModifier", + "type": "int", + "kind": "scalar", + "gameField": "ReactionModifier", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetReactionModifier" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ModifyStats", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_ModifyStats", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": true, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Nearsighted", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Nearsighted", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "DmgMod", + "type": "float", + "kind": "scalar", + "gameField": "DmgMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDmgMod" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Needle", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Needle", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ArmorPierce", + "type": "int", + "kind": "scalar", + "gameField": "ArmorPierce", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetArmorPierce" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Oblivious", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Oblivious", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "DmgMod", + "type": "float", + "kind": "scalar", + "gameField": "DmgMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDmgMod" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_OverrideDeathAnimOnLoad", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_OverrideDeathAnimOnLoad", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "OverrideAnimNameOnLoad", + "type": "name", + "kind": "scalar", + "gameField": "OverrideAnimNameOnLoad", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOverrideAnimNameOnLoad" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_PaleHorse", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_PaleHorse", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "CritBoostPerKill", + "type": "int", + "kind": "scalar", + "gameField": "CritBoostPerKill", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCritBoostPerKill" + }, + { + "config": "MaxCritBoost", + "type": "int", + "kind": "scalar", + "gameField": "MaxCritBoost", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMaxCritBoost" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_PersistentSquadViewer", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_PersistentSquadViewer", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "UseWeaponRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponRadius", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseWeaponRadius" + }, + { + "config": "ViewRadius", + "type": "float", + "kind": "scalar", + "gameField": "ViewRadius", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetViewRadius" + }, + { + "config": "UseSourceLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourceLocation", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseSourceLocation" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_PersistentTraversalChange", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_PersistentTraversalChange", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "TraversalChanges", + "type": "array", + "kind": "namearray", + "gameField": "aTraversalChanges", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "TraversalChangesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_PersistentVoidConduit", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_PersistentVoidConduit", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "InitialDamage", + "type": "int", + "kind": "scalar", + "gameField": "InitialDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetInitialDamage" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Possessed", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Possessed", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "WeaponTemplateName", + "type": "name", + "kind": "scalar", + "gameField": "WeaponTemplateName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetWeaponTemplateName" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Reaper", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Reaper", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ReaperActivatedName", + "type": "name", + "kind": "scalar", + "gameField": "ReaperActivatedName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetReaperActivatedName" + }, + { + "config": "ReaperKillName", + "type": "name", + "kind": "scalar", + "gameField": "ReaperKillName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetReaperKillName" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Regeneration", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Regeneration", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "HealAmount", + "type": "int", + "kind": "scalar", + "gameField": "HealAmount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHealAmount" + }, + { + "config": "MaxHealAmount", + "type": "int", + "kind": "scalar", + "gameField": "MaxHealAmount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMaxHealAmount" + }, + { + "config": "HealthRegeneratedName", + "type": "name", + "kind": "scalar", + "gameField": "HealthRegeneratedName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHealthRegeneratedName" + }, + { + "config": "EventToTriggerOnHeal", + "type": "name", + "kind": "scalar", + "gameField": "EventToTriggerOnHeal", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEventToTriggerOnHeal" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_RemoveEffectsByDamageType", + "extends": "X2AbilityEffectsEditor_RemoveEffects", + "gameClass": "X2Effect_RemoveEffectsByDamageType", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "DamageTypesToRemove", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypesToRemove", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "DamageTypesToRemoveMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "Cleanse", + "type": "bool", + "kind": "scalar", + "gameField": "bCleanse", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_RemoveEffects", + "description": "", + "guard": "SetCleanse" + }, + { + "config": "CheckSource", + "type": "bool", + "kind": "scalar", + "gameField": "bCheckSource", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_RemoveEffects", + "description": "", + "guard": "SetCheckSource" + }, + { + "config": "DoNotVisualize", + "type": "bool", + "kind": "scalar", + "gameField": "bDoNotVisualize", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_RemoveEffects", + "description": "", + "guard": "SetDoNotVisualize" + }, + { + "config": "EffectNamesToRemove", + "type": "array", + "kind": "namearray", + "gameField": "EffectNamesToRemove", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_RemoveEffects", + "description": "", + "modeField": "EffectNamesToRemoveMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ReserveOverwatchPoints", + "extends": "X2AbilityEffectsEditor_ReserveActionPoints", + "gameClass": "X2Effect_ReserveOverwatchPoints", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "UseAllPointsWithAbilities", + "type": "array", + "kind": "namearray", + "gameField": "UseAllPointsWithAbilities", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "UseAllPointsWithAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "ReserveType", + "type": "name", + "kind": "scalar", + "gameField": "ReserveType", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ReserveActionPoints", + "description": "", + "guard": "SetReserveType" + }, + { + "config": "NumPoints", + "type": "int", + "kind": "scalar", + "gameField": "NumPoints", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_ReserveActionPoints", + "description": "", + "guard": "SetNumPoints" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_RunBehaviorTree", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_RunBehaviorTree", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "NumActions", + "type": "int", + "kind": "scalar", + "gameField": "NumActions", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumActions" + }, + { + "config": "BehaviorTreeName", + "type": "name", + "kind": "scalar", + "gameField": "BehaviorTreeName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBehaviorTreeName" + }, + { + "config": "InitFromPlayer", + "type": "bool", + "kind": "scalar", + "gameField": "bInitFromPlayer", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetInitFromPlayer" + }, + { + "config": "SetActionPointCount", + "type": "int", + "kind": "scalar", + "gameField": "SetActionPointCount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSetActionPointCount" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ScanningProtocol", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_ScanningProtocol", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "LookAtDuration", + "type": "float", + "kind": "scalar", + "gameField": "LookAtDuration", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetLookAtDuration" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_SmokeGrenade", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_SmokeGrenade", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "HitMod", + "type": "int", + "kind": "scalar", + "gameField": "HitMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHitMod" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_SpawnDestructible", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_SpawnDestructible", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "DestructibleArchetype", + "type": "string", + "kind": "scalar", + "gameField": "DestructibleArchetype", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDestructibleArchetype" + }, + { + "config": "DestroyOnRemoval", + "type": "bool", + "kind": "scalar", + "gameField": "bDestroyOnRemoval", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDestroyOnRemoval" + }, + { + "config": "TargetableBySpawnedTeamOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bTargetableBySpawnedTeamOnly", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTargetableBySpawnedTeamOnly" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [ + { + "name": "TargetingIcon", + "reason": "type `Texture2D`" + } + ] + }, + { + "class": "X2AbilityEffectsEditor_SpawnUnit", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_SpawnUnit", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "UnitToSpawnName", + "type": "name", + "kind": "scalar", + "gameField": "UnitToSpawnName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUnitToSpawnName" + }, + { + "config": "ClearTileBlockedByTargetUnitFlag", + "type": "bool", + "kind": "scalar", + "gameField": "bClearTileBlockedByTargetUnitFlag", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetClearTileBlockedByTargetUnitFlag" + }, + { + "config": "CopyTargetAppearance", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyTargetAppearance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCopyTargetAppearance" + }, + { + "config": "CopySourceAppearance", + "type": "bool", + "kind": "scalar", + "gameField": "bCopySourceAppearance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCopySourceAppearance" + }, + { + "config": "KnockbackAffectsSpawnLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bKnockbackAffectsSpawnLocation", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetKnockbackAffectsSpawnLocation" + }, + { + "config": "AddToSourceGroup", + "type": "bool", + "kind": "scalar", + "gameField": "bAddToSourceGroup", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAddToSourceGroup" + }, + { + "config": "CopyReanimatedFromUnit", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyReanimatedFromUnit", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCopyReanimatedFromUnit" + }, + { + "config": "CopyReanimatedStatsFromUnit", + "type": "bool", + "kind": "scalar", + "gameField": "bCopyReanimatedStatsFromUnit", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCopyReanimatedStatsFromUnit" + }, + { + "config": "SetProcessedScamperAs", + "type": "bool", + "kind": "scalar", + "gameField": "bSetProcessedScamperAs", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSetProcessedScamperAs" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Stasis", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Stasis", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "StunStartAnim", + "type": "name", + "kind": "scalar", + "gameField": "StunStartAnim", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStunStartAnim" + }, + { + "config": "StunStopAnim", + "type": "name", + "kind": "scalar", + "gameField": "StunStopAnim", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStunStopAnim" + }, + { + "config": "SkipFlyover", + "type": "bool", + "kind": "scalar", + "gameField": "bSkipFlyover", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSkipFlyover" + }, + { + "config": "StartAnimBlendTime", + "type": "float", + "kind": "scalar", + "gameField": "StartAnimBlendTime", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStartAnimBlendTime" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Stunned", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Stunned", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "StunLevel", + "type": "int", + "kind": "scalar", + "gameField": "StunLevel", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStunLevel" + }, + { + "config": "SkipAnimation", + "type": "bool", + "kind": "scalar", + "gameField": "bSkipAnimation", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSkipAnimation" + }, + { + "config": "StunStartAnimName", + "type": "name", + "kind": "scalar", + "gameField": "StunStartAnimName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStunStartAnimName" + }, + { + "config": "StunStopAnimName", + "type": "name", + "kind": "scalar", + "gameField": "StunStopAnimName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStunStopAnimName" + }, + { + "config": "StunnedTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "StunnedTriggerName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStunnedTriggerName" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_SuperConcealModifier", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_SuperConcealModifier", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ConcealAmountScalar", + "type": "float", + "kind": "scalar", + "gameField": "ConcealAmountScalar", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConcealAmountScalar" + }, + { + "config": "AbilitiesAffectedFilter", + "type": "array", + "kind": "namearray", + "gameField": "AbilitiesAffectedFilter", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "AbilitiesAffectedFilterMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "RemoveOnAbilityActivation", + "type": "array", + "kind": "namearray", + "gameField": "RemoveOnAbilityActivation", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "RemoveOnAbilityActivationMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Sustain", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Sustain", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Sustained", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_Sustained", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "SustainedAbilityName", + "type": "name", + "kind": "scalar", + "gameField": "SustainedAbilityName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSustainedAbilityName" + }, + { + "config": "FragileAmount", + "type": "int", + "kind": "scalar", + "gameField": "FragileAmount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFragileAmount" + }, + { + "config": "EffectsToRemoveFromSource", + "type": "array", + "kind": "namearray", + "gameField": "EffectsToRemoveFromSource", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "EffectsToRemoveFromSourceMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "EffectsToRemoveFromTarget", + "type": "array", + "kind": "namearray", + "gameField": "EffectsToRemoveFromTarget", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "EffectsToRemoveFromTargetMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "RegisterAdditionalEventsLikeImpair", + "type": "array", + "kind": "namearray", + "gameField": "RegisterAdditionalEventsLikeImpair", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "RegisterAdditionalEventsLikeImpairMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_TalonRounds", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_TalonRounds", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "AimMod", + "type": "int", + "kind": "scalar", + "gameField": "AimMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAimMod" + }, + { + "config": "CritChance", + "type": "int", + "kind": "scalar", + "gameField": "CritChance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCritChance" + }, + { + "config": "CritDamage", + "type": "int", + "kind": "scalar", + "gameField": "CritDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCritDamage" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_TargetDamageDistanceBonus", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_TargetDamageDistanceBonus", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "BonusDmgFloat", + "type": "float", + "kind": "scalar", + "gameField": "BonusDmg", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusDmgFloat" + }, + { + "config": "BonusModType", + "type": "EStatModOp", + "kind": "scalar", + "gameField": "BonusModType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusModType" + }, + { + "config": "WithinTileDistance", + "type": "int", + "kind": "scalar", + "gameField": "WithinTileDistance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetWithinTileDistance" + }, + { + "config": "PrimaryTargetOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bPrimaryTargetOnly", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPrimaryTargetOnly" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_TargetDamageTypeBonus", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_TargetDamageTypeBonus", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "BonusDmgFloat", + "type": "float", + "kind": "scalar", + "gameField": "BonusDmg", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusDmgFloat" + }, + { + "config": "BonusModType", + "type": "EStatModOp", + "kind": "scalar", + "gameField": "BonusModType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusModType" + }, + { + "config": "BonusDamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "BonusDamageTypes", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "BonusDamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ToHitModifier", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_ToHitModifier", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ApplyAsTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyAsTarget", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetApplyAsTarget" + }, + { + "config": "EffectHitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "Modifiers", + "origin": "derived", + "inheritedFrom": null, + "description": "X2Effect_ToHitModifier: replace-only — when non-empty, replaces Modifiers entirely", + "replaceOnly": true + }, + { + "config": "ToHitConditions", + "type": "array", + "kind": "nested", + "gameField": null, + "origin": "derived", + "inheritedFrom": null, + "description": "X2Effect_ToHitModifier" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [ + { + "name": "ToHitConditions", + "reason": "array of `X2Condition`" + } + ] + }, + { + "class": "X2AbilityEffectsEditor_TrackingShotMarkTarget", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_TrackingShotMarkTarget", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ConeLength", + "type": "float", + "kind": "scalar", + "gameField": "ConeLength", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConeLength" + }, + { + "config": "ConeEndDiameter", + "type": "float", + "kind": "scalar", + "gameField": "ConeEndDiameter", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConeEndDiameter" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_TurnStartActionPoints", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_TurnStartActionPoints", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ActionPointType", + "type": "name", + "kind": "scalar", + "gameField": "ActionPointType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetActionPointType" + }, + { + "config": "NumActionPoints", + "type": "int", + "kind": "scalar", + "gameField": "NumActionPoints", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumActionPoints" + }, + { + "config": "ActionPointsRemoved", + "type": "bool", + "kind": "scalar", + "gameField": "bActionPointsRemoved", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetActionPointsRemoved" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_VolatileMix", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_VolatileMix", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "BonusDamage", + "type": "int", + "kind": "scalar", + "gameField": "BonusDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBonusDamage" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ApplyDirectionalWorldDamage", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_ApplyDirectionalWorldDamage", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "EnvironmentalDamageAmount", + "type": "int", + "kind": "scalar", + "gameField": "EnvironmentalDamageAmount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEnvironmentalDamageAmount" + }, + { + "config": "DamageTypeTemplateName", + "type": "name", + "kind": "scalar", + "gameField": "DamageTypeTemplateName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDamageTypeTemplateName" + }, + { + "config": "PlusNumZTiles", + "type": "int", + "kind": "scalar", + "gameField": "PlusNumZTiles", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPlusNumZTiles" + }, + { + "config": "UseWeaponEnvironmentalDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponEnvironmentalDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseWeaponEnvironmentalDamage" + }, + { + "config": "UseWeaponDamageType", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponDamageType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseWeaponDamageType" + }, + { + "config": "HitSourceTile", + "type": "bool", + "kind": "scalar", + "gameField": "bHitSourceTile", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHitSourceTile" + }, + { + "config": "HitTargetTile", + "type": "bool", + "kind": "scalar", + "gameField": "bHitTargetTile", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHitTargetTile" + }, + { + "config": "HitAdjacentDestructibles", + "type": "bool", + "kind": "scalar", + "gameField": "bHitAdjacentDestructibles", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHitAdjacentDestructibles" + }, + { + "config": "AllowDestructionOfDamageCauseCover", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowDestructionOfDamageCauseCover", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAllowDestructionOfDamageCauseCover" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ApplyMedikitHeal", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_ApplyMedikitHeal", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "PerUseHP", + "type": "int", + "kind": "scalar", + "gameField": "PerUseHP", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPerUseHP" + }, + { + "config": "IncreasedHealProject", + "type": "name", + "kind": "scalar", + "gameField": "IncreasedHealProject", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIncreasedHealProject" + }, + { + "config": "IncreasedPerUseHP", + "type": "int", + "kind": "scalar", + "gameField": "IncreasedPerUseHP", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIncreasedPerUseHP" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ApplyWeaponDamage", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_ApplyWeaponDamage", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ExplosiveDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bExplosiveDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExplosiveDamage" + }, + { + "config": "IgnoreBaseDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreBaseDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIgnoreBaseDamage" + }, + { + "config": "DamageTag", + "type": "name", + "kind": "scalar", + "gameField": "DamageTag", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDamageTag" + }, + { + "config": "AlwaysKillsCivilians", + "type": "bool", + "kind": "scalar", + "gameField": "bAlwaysKillsCivilians", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAlwaysKillsCivilians" + }, + { + "config": "ApplyWorldEffectsForEachTargetLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyWorldEffectsForEachTargetLocation", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetApplyWorldEffectsForEachTargetLocation" + }, + { + "config": "AllowFreeKill", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowFreeKill", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAllowFreeKill" + }, + { + "config": "AllowWeaponUpgrade", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowWeaponUpgrade", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAllowWeaponUpgrade" + }, + { + "config": "BypassShields", + "type": "bool", + "kind": "scalar", + "gameField": "bBypassShields", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBypassShields" + }, + { + "config": "IgnoreArmor", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreArmor", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIgnoreArmor" + }, + { + "config": "BypassSustainEffects", + "type": "bool", + "kind": "scalar", + "gameField": "bBypassSustainEffects", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBypassSustainEffects" + }, + { + "config": "EnvironmentalDamageAmount", + "type": "int", + "kind": "scalar", + "gameField": "EnvironmentalDamageAmount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEnvironmentalDamageAmount" + }, + { + "config": "WeaponDamageValue", + "type": "WeaponDamageValueEdit", + "kind": "nested", + "gameField": "EffectDamageValue", + "origin": "derived", + "inheritedFrom": null, + "description": "" + } + ], + "abstract": false, + "notEditable": [ + { + "name": "HideVisualizationOfResultsAdditional", + "reason": "not yet supported" + } + ] + }, + { + "class": "X2AbilityEffectsEditor_Brutal", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_Brutal", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "WillMod", + "type": "int", + "kind": "scalar", + "gameField": "WillMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetWillMod" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_EnableGlobalAbility", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_EnableGlobalAbility", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "GlobalAbility", + "type": "name", + "kind": "scalar", + "gameField": "GlobalAbility", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetGlobalAbility" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_GetOverHere", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_GetOverHere", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "OverrideStartAnimName", + "type": "Name", + "kind": "scalar", + "gameField": "OverrideStartAnimName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOverrideStartAnimName" + }, + { + "config": "OverrideStopAnimName", + "type": "Name", + "kind": "scalar", + "gameField": "OverrideStopAnimName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOverrideStopAnimName" + }, + { + "config": "RequireVisibleTile", + "type": "bool", + "kind": "scalar", + "gameField": "RequireVisibleTile", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireVisibleTile" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_GrantActionPoints", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_GrantActionPoints", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "NumActionPoints", + "type": "int", + "kind": "scalar", + "gameField": "NumActionPoints", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumActionPoints" + }, + { + "config": "PointType", + "type": "name", + "kind": "scalar", + "gameField": "PointType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPointType" + }, + { + "config": "ApplyOnlyWhenOut", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnlyWhenOut", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetApplyOnlyWhenOut" + }, + { + "config": "SelectUnit", + "type": "bool", + "kind": "scalar", + "gameField": "bSelectUnit", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSelectUnit" + }, + { + "config": "SkipWithEffect", + "type": "array", + "kind": "namearray", + "gameField": "SkipWithEffect", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "SkipWithEffectMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_IncreaseBondmateCohesion", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_IncreaseBondmateCohesion", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "CohesionAmount", + "type": "int", + "kind": "scalar", + "gameField": "CohesionAmount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCohesionAmount" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Knockback", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_Knockback", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "KnockbackDistance", + "type": "int", + "kind": "scalar", + "gameField": "KnockbackDistance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetKnockbackDistance" + }, + { + "config": "KnockbackDestroysNonFragile", + "type": "bool", + "kind": "scalar", + "gameField": "bKnockbackDestroysNonFragile", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetKnockbackDestroysNonFragile" + }, + { + "config": "OverrideRagdollFinishTimerSec", + "type": "float", + "kind": "scalar", + "gameField": "OverrideRagdollFinishTimerSec", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOverrideRagdollFinishTimerSec" + }, + { + "config": "OnlyOnDeath", + "type": "bool", + "kind": "scalar", + "gameField": "OnlyOnDeath", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyOnDeath" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_LifeSteal", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_LifeSteal", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "LifeAmountMultiplier", + "type": "float", + "kind": "scalar", + "gameField": "LifeAmountMultiplier", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetLifeAmountMultiplier" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_MarkValidActivationTiles", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_MarkValidActivationTiles", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "AbilityToMark", + "type": "name", + "kind": "scalar", + "gameField": "AbilityToMark", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAbilityToMark" + }, + { + "config": "OnlyUseTargetLocation", + "type": "bool", + "kind": "scalar", + "gameField": "OnlyUseTargetLocation", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyUseTargetLocation" + }, + { + "config": "VisualizeFlagsOnCursor", + "type": "bool", + "kind": "scalar", + "gameField": "bVisualizeFlagsOnCursor", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetVisualizeFlagsOnCursor" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ModifyInitiativeOrder", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_ModifyInitiativeOrder", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "RemoveGroupFromInitiativeOrder", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveGroupFromInitiativeOrder", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRemoveGroupFromInitiativeOrder" + }, + { + "config": "AddGroupToInitiativeOrder", + "type": "bool", + "kind": "scalar", + "gameField": "bAddGroupToInitiativeOrder", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAddGroupToInitiativeOrder" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ModifyTemplarFocus", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_ModifyTemplarFocus", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ModifyFocus", + "type": "int", + "kind": "scalar", + "gameField": "ModifyFocus", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetModifyFocus" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_LethalWeaponDamage", + "extends": "X2AbilityEffectsEditor_Persistent", + "gameClass": "X2Effect_LethalWeaponDamage", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "LethalDamageConditions", + "type": "array", + "kind": "nested", + "gameField": null, + "origin": "derived", + "inheritedFrom": null, + "description": "X2Effect_LethalWeaponDamage" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": "X2AbilityEffectsEditor_Persistent", + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [ + { + "name": "LethalDamageConditions", + "reason": "array of `X2Condition`" + } + ] + }, + { + "class": "X2AbilityEffectsEditor_Persistent", + "extends": "X2AbilityEffectsEditor", + "gameClass": "X2Effect_Persistent", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "InfiniteDuration", + "type": "bool", + "kind": "scalar", + "gameField": "bInfiniteDuration", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetInfiniteDuration" + }, + { + "config": "TickWhenApplied", + "type": "bool", + "kind": "scalar", + "gameField": "bTickWhenApplied", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTickWhenApplied" + }, + { + "config": "CanTickEveryAction", + "type": "bool", + "kind": "scalar", + "gameField": "bCanTickEveryAction", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCanTickEveryAction" + }, + { + "config": "ConvertTurnsToActions", + "type": "bool", + "kind": "scalar", + "gameField": "bConvertTurnsToActions", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConvertTurnsToActions" + }, + { + "config": "RemoveWhenSourceDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDies", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRemoveWhenSourceDies" + }, + { + "config": "RemoveWhenTargetDies", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetDies", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRemoveWhenTargetDies" + }, + { + "config": "RemoveWhenSourceDamaged", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenSourceDamaged", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRemoveWhenSourceDamaged" + }, + { + "config": "RemoveWhenTargetConcealmentBroken", + "type": "bool", + "kind": "scalar", + "gameField": "bRemoveWhenTargetConcealmentBroken", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRemoveWhenTargetConcealmentBroken" + }, + { + "config": "PersistThroughTacticalGameEnd", + "type": "bool", + "kind": "scalar", + "gameField": "bPersistThroughTacticalGameEnd", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPersistThroughTacticalGameEnd" + }, + { + "config": "IgnorePlayerCheckOnTick", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnorePlayerCheckOnTick", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIgnorePlayerCheckOnTick" + }, + { + "config": "UniqueTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUniqueTarget", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUniqueTarget" + }, + { + "config": "StackOnRefresh", + "type": "bool", + "kind": "scalar", + "gameField": "bStackOnRefresh", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStackOnRefresh" + }, + { + "config": "DupeForSameSourceOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bDupeForSameSourceOnly", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDupeForSameSourceOnly" + }, + { + "config": "EffectForcesBleedout", + "type": "bool", + "kind": "scalar", + "gameField": "bEffectForcesBleedout", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEffectForcesBleedout" + }, + { + "config": "DisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInUI", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDisplayInUI" + }, + { + "config": "DisplayInSpecialDamageMessageUI", + "type": "bool", + "kind": "scalar", + "gameField": "bDisplayInSpecialDamageMessageUI", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDisplayInSpecialDamageMessageUI" + }, + { + "config": "SourceDisplayInUI", + "type": "bool", + "kind": "scalar", + "gameField": "bSourceDisplayInUI", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSourceDisplayInUI" + }, + { + "config": "NumTurns", + "type": "int", + "kind": "scalar", + "gameField": "iNumTurns", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumTurns" + }, + { + "config": "InitialShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iInitialShedChance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetInitialShedChance" + }, + { + "config": "PerTurnShedChance", + "type": "int", + "kind": "scalar", + "gameField": "iPerTurnShedChance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPerTurnShedChance" + }, + { + "config": "EffectRank", + "type": "int", + "kind": "scalar", + "gameField": "EffectRank", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEffectRank" + }, + { + "config": "EffectHierarchyValue", + "type": "int", + "kind": "scalar", + "gameField": "EffectHierarchyValue", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEffectHierarchyValue" + }, + { + "config": "VisionArcDegreesOverride", + "type": "float", + "kind": "scalar", + "gameField": "VisionArcDegreesOverride", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetVisionArcDegreesOverride" + }, + { + "config": "CustomIdleOverrideAnim", + "type": "name", + "kind": "scalar", + "gameField": "CustomIdleOverrideAnim", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCustomIdleOverrideAnim" + }, + { + "config": "EffectName", + "type": "name", + "kind": "scalar", + "gameField": "EffectName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEffectName" + }, + { + "config": "AbilitySourceName", + "type": "name", + "kind": "scalar", + "gameField": "AbilitySourceName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAbilitySourceName" + }, + { + "config": "EffectAppliedEventName", + "type": "name", + "kind": "scalar", + "gameField": "EffectAppliedEventName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEffectAppliedEventName" + }, + { + "config": "ChanceEventTriggerName", + "type": "name", + "kind": "scalar", + "gameField": "ChanceEventTriggerName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetChanceEventTriggerName" + }, + { + "config": "VFXSocket", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocket", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetVFXSocket" + }, + { + "config": "VFXSocketsArrayName", + "type": "name", + "kind": "scalar", + "gameField": "VFXSocketsArrayName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetVFXSocketsArrayName" + }, + { + "config": "FriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFriendlyName" + }, + { + "config": "FriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "FriendlyDescription", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFriendlyDescription" + }, + { + "config": "IconImage", + "type": "string", + "kind": "scalar", + "gameField": "IconImage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIconImage" + }, + { + "config": "SourceFriendlyName", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSourceFriendlyName" + }, + { + "config": "SourceFriendlyDescription", + "type": "string", + "kind": "scalar", + "gameField": "SourceFriendlyDescription", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSourceFriendlyDescription" + }, + { + "config": "SourceIconLabel", + "type": "string", + "kind": "scalar", + "gameField": "SourceIconLabel", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSourceIconLabel" + }, + { + "config": "StatusIcon", + "type": "string", + "kind": "scalar", + "gameField": "StatusIcon", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStatusIcon" + }, + { + "config": "VFXTemplateName", + "type": "string", + "kind": "scalar", + "gameField": "VFXTemplateName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetVFXTemplateName" + }, + { + "config": "PersistentPerkName", + "type": "string", + "kind": "scalar", + "gameField": "PersistentPerkName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPersistentPerkName" + } + ], + "abstract": false, + "notEditable": [ + { + "name": "TickTriggers", + "reason": "array of `X2EffectTrigger`" + }, + { + "name": "DuplicateResponse", + "reason": "not yet supported" + }, + { + "name": "ApplyOnTick", + "reason": "array of `X2Effect`" + }, + { + "name": "WatchRule", + "reason": "type `GameRuleStateChange`" + }, + { + "name": "BuffCategory", + "reason": "not yet supported" + }, + { + "name": "SourceBuffCategory", + "reason": "not yet supported" + }, + { + "name": "GameStateEffectClass", + "reason": "class reference" + }, + { + "name": "VisualizationFn", + "reason": "delegate — code-only" + }, + { + "name": "CleansedVisualizationFn", + "reason": "delegate — code-only" + }, + { + "name": "EffectTickedVisualizationFn", + "reason": "delegate — code-only" + }, + { + "name": "EffectSyncVisualizationFn", + "reason": "delegate — code-only" + }, + { + "name": "EffectRemovedVisualizationFn", + "reason": "delegate — code-only" + }, + { + "name": "EffectRemovedSourceVisualizationFn", + "reason": "delegate — code-only" + }, + { + "name": "DeathVisualizationFn", + "reason": "delegate — code-only" + }, + { + "name": "ModifyTracksFn", + "reason": "delegate — code-only" + }, + { + "name": "EffectRemovedFn", + "reason": "delegate — code-only" + }, + { + "name": "EffectAddedFn", + "reason": "delegate — code-only" + }, + { + "name": "EffectTickedFn", + "reason": "delegate — code-only" + }, + { + "name": "GetModifyChosenActivationIncreasePerUseFn", + "reason": "delegate — code-only" + }, + { + "name": "UnitBreaksConcealmentIgnoringDistanceFn", + "reason": "delegate — code-only" + } + ] + }, + { + "class": "X2AbilityEffectsEditor_ReduceCooldowns", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_ReduceCooldowns", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "Amount", + "type": "int", + "kind": "scalar", + "gameField": "Amount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAmount" + }, + { + "config": "ReduceAll", + "type": "bool", + "kind": "scalar", + "gameField": "ReduceAll", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetReduceAll" + }, + { + "config": "AbilitiesToTick", + "type": "array", + "kind": "namearray", + "gameField": "AbilitiesToTick", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "AbilitiesToTickMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_RemoteStart", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_RemoteStart", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "UnitDamageMultiplier", + "type": "float", + "kind": "scalar", + "gameField": "UnitDamageMultiplier", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUnitDamageMultiplier" + }, + { + "config": "DamageRadiusMultiplier", + "type": "float", + "kind": "scalar", + "gameField": "DamageRadiusMultiplier", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDamageRadiusMultiplier" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_RemoveEffects", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_RemoveEffects", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "Cleanse", + "type": "bool", + "kind": "scalar", + "gameField": "bCleanse", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCleanse" + }, + { + "config": "CheckSource", + "type": "bool", + "kind": "scalar", + "gameField": "bCheckSource", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCheckSource" + }, + { + "config": "DoNotVisualize", + "type": "bool", + "kind": "scalar", + "gameField": "bDoNotVisualize", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDoNotVisualize" + }, + { + "config": "EffectNamesToRemove", + "type": "array", + "kind": "namearray", + "gameField": "EffectNamesToRemove", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "EffectNamesToRemoveMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_ReserveActionPoints", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_ReserveActionPoints", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ReserveType", + "type": "name", + "kind": "scalar", + "gameField": "ReserveType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetReserveType" + }, + { + "config": "NumPoints", + "type": "int", + "kind": "scalar", + "gameField": "NumPoints", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumPoints" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_SetUnitValue", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_SetUnitValue", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "UnitName", + "type": "name", + "kind": "scalar", + "gameField": "UnitName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUnitName" + }, + { + "config": "NewValueToSet", + "type": "float", + "kind": "scalar", + "gameField": "NewValueToSet", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNewValueToSet" + }, + { + "config": "CleanupType", + "type": "EUnitValueCleanup", + "kind": "scalar", + "gameField": "CleanupType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCleanupType" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_SoulSteal", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_SoulSteal", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "UnitValueToRead", + "type": "name", + "kind": "scalar", + "gameField": "UnitValueToRead", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUnitValueToRead" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Spotted", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_Spotted", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "BecomeUnspotted", + "type": "bool", + "kind": "scalar", + "gameField": "m_bBecomeUnspotted", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBecomeUnspotted" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_SuspendMissionTimer", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_SuspendMissionTimer", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "ResumeMissionTimer", + "type": "bool", + "kind": "scalar", + "gameField": "bResumeMissionTimer", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetResumeMissionTimer" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_TriggerEvent", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_TriggerEvent", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "TriggerEventName", + "type": "name", + "kind": "scalar", + "gameField": "TriggerEventName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTriggerEventName" + }, + { + "config": "PassTargetAsSource", + "type": "bool", + "kind": "scalar", + "gameField": "PassTargetAsSource", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPassTargetAsSource" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_VoidConduit", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_VoidConduit", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "DamagePerAction", + "type": "int", + "kind": "scalar", + "gameField": "DamagePerAction", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDamagePerAction" + }, + { + "config": "HealthReturnMod", + "type": "float", + "kind": "scalar", + "gameField": "HealthReturnMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHealthReturnMod" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_World", + "extends": "X2AbilityEffectsEditor_Base", + "gameClass": "X2Effect_World", + "catchAll": false, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + }, + { + "config": "CenterTile", + "type": "bool", + "kind": "scalar", + "gameField": "bCenterTile", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCenterTile" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityEffectsEditor_Base", + "extends": "X2AbilityEffectsEditor", + "gameClass": null, + "catchAll": true, + "fields": [ + { + "config": "ApplyOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnHit" + }, + { + "config": "ApplyOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyOnMiss" + }, + { + "config": "ApplyChance", + "type": "int", + "kind": "scalar", + "gameField": "ApplyChance", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyChance" + }, + { + "config": "ApplyToWorldOnHit", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnHit", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnHit" + }, + { + "config": "ApplyToWorldOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bApplyToWorldOnMiss", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetApplyToWorldOnMiss" + }, + { + "config": "UseSourcePlayerState", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourcePlayerState", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetUseSourcePlayerState" + }, + { + "config": "IsImpairing", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairing", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairing" + }, + { + "config": "IsImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "bIsImpairingMomentarily", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetIsImpairingMomentarily" + }, + { + "config": "BringRemoveVisualizationForward", + "type": "bool", + "kind": "scalar", + "gameField": "bBringRemoveVisualizationForward", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetBringRemoveVisualizationForward" + }, + { + "config": "ShowImmunity", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunity", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunity" + }, + { + "config": "ShowImmunityAnyFailure", + "type": "bool", + "kind": "scalar", + "gameField": "bShowImmunityAnyFailure", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetShowImmunityAnyFailure" + }, + { + "config": "AppliesDamage", + "type": "bool", + "kind": "scalar", + "gameField": "bAppliesDamage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetAppliesDamage" + }, + { + "config": "CanBeRedirected", + "type": "bool", + "kind": "scalar", + "gameField": "bCanBeRedirected", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetCanBeRedirected" + }, + { + "config": "HideDeathWorldMessage", + "type": "bool", + "kind": "scalar", + "gameField": "bHideDeathWorldMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetHideDeathWorldMessage" + }, + { + "config": "MinStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MinStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMinStatContestResult" + }, + { + "config": "MaxStatContestResult", + "type": "int", + "kind": "scalar", + "gameField": "MaxStatContestResult", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetMaxStatContestResult" + }, + { + "config": "DelayVisualizationSec", + "type": "float", + "kind": "scalar", + "gameField": "DelayVisualizationSec", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetDelayVisualizationSec" + }, + { + "config": "OverrideMissMessage", + "type": "string", + "kind": "scalar", + "gameField": "OverrideMissMessage", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "guard": "SetOverrideMissMessage" + }, + { + "config": "DamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "DamageTypes", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "", + "modeField": "DamageTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "TargetConditions", + "type": "array", + "kind": "nested", + "gameField": "TargetConditions", + "origin": "base", + "inheritedFrom": "X2AbilityEffectsEditor", + "description": "Conditions attached to the effect (X2Effect.TargetConditions)" + } + ] + } + ] + }, + { + "name": "Conditions", + "configKey": "", + "editStruct": "ConditionEdit", + "wired": true, + "dispatchOrder": [ + "X2AbilityConditionEditor_UnitEffectsApplying", + "X2AbilityConditionEditor_UnitEffectsOnSource", + "X2AbilityConditionEditor_UnitEffectsWithAbilitySource", + "X2AbilityConditionEditor_UnitEffectsWithAbilityTarget", + "X2AbilityConditionEditor_AbilityProperty", + "X2AbilityConditionEditor_AbilitySourceWeapon", + "X2AbilityConditionEditor_BattleState", + "X2AbilityConditionEditor_BerserkerDevastatingPunch", + "X2AbilityConditionEditor_Bondmate", + "X2AbilityConditionEditor_DarkEvent", + "X2AbilityConditionEditor_EverVigilant", + "X2AbilityConditionEditor_FuseTarget", + "X2AbilityConditionEditor_GameplayTag", + "X2AbilityConditionEditor_HackingTarget", + "X2AbilityConditionEditor_Interactive", + "X2AbilityConditionEditor_Lootable", + "X2AbilityConditionEditor_MapProperty", + "X2AbilityConditionEditor_OnGroundTile", + "X2AbilityConditionEditor_PanicOnPod", + "X2AbilityConditionEditor_PlayerTurns", + "X2AbilityConditionEditor_StasisLanceTarget", + "X2AbilityConditionEditor_StasisTarget", + "X2AbilityConditionEditor_Stealth", + "X2AbilityConditionEditor_UnblockedNeighborTile", + "X2AbilityConditionEditor_UnitActionPoints", + "X2AbilityConditionEditor_UnitAlertStatus", + "X2AbilityConditionEditor_UnitEffects", + "X2AbilityConditionEditor_UnitImmunities", + "X2AbilityConditionEditor_UnitInEvacZone", + "X2AbilityConditionEditor_UnitInteractions", + "X2AbilityConditionEditor_UnitInventory", + "X2AbilityConditionEditor_UnitProperty", + "X2AbilityConditionEditor_UnitStatCheck", + "X2AbilityConditionEditor_UnitType", + "X2AbilityConditionEditor_UnitValue", + "X2AbilityConditionEditor_Visibility", + "X2AbilityConditionEditor_Base" + ], + "intro": "Conditions can be edited in seven places: the template-level arrays (`ShooterConditions`, `TargetConditions`, `MultiTargetConditions` directly inside an `AbilityEdit`) and, inside an `Effects` entry, the effect's own `TargetConditions` plus the class-specific `ApplyDamageModConditions`, `LethalDamageConditions` and `ToHitConditions`. All take an array of `ConditionEdit` entries. Within the targeted array, the condition of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`.", + "editors": [ + { + "class": "X2AbilityConditionEditor_UnitEffectsApplying", + "extends": "X2AbilityConditionEditor_UnitEffects", + "gameClass": "X2Condition_UnitEffectsApplying", + "catchAll": false, + "fields": [ + { + "config": "ExcludeEffects", + "type": "array", + "kind": "namearray", + "gameField": "ExcludeEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityConditionEditor_UnitEffects", + "description": "", + "modeField": "ExcludeEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "RequireEffects", + "type": "array", + "kind": "namearray", + "gameField": "RequireEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityConditionEditor_UnitEffects", + "description": "", + "modeField": "RequireEffectsMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitEffectsOnSource", + "extends": "X2AbilityConditionEditor_UnitEffects", + "gameClass": "X2Condition_UnitEffectsOnSource", + "catchAll": false, + "fields": [ + { + "config": "ExcludeEffects", + "type": "array", + "kind": "namearray", + "gameField": "ExcludeEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityConditionEditor_UnitEffects", + "description": "", + "modeField": "ExcludeEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "RequireEffects", + "type": "array", + "kind": "namearray", + "gameField": "RequireEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityConditionEditor_UnitEffects", + "description": "", + "modeField": "RequireEffectsMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitEffectsWithAbilitySource", + "extends": "X2AbilityConditionEditor_UnitEffects", + "gameClass": "X2Condition_UnitEffectsWithAbilitySource", + "catchAll": false, + "fields": [ + { + "config": "ExcludeEffects", + "type": "array", + "kind": "namearray", + "gameField": "ExcludeEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityConditionEditor_UnitEffects", + "description": "", + "modeField": "ExcludeEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "RequireEffects", + "type": "array", + "kind": "namearray", + "gameField": "RequireEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityConditionEditor_UnitEffects", + "description": "", + "modeField": "RequireEffectsMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitEffectsWithAbilityTarget", + "extends": "X2AbilityConditionEditor_UnitEffects", + "gameClass": "X2Condition_UnitEffectsWithAbilityTarget", + "catchAll": false, + "fields": [ + { + "config": "ExcludeEffects", + "type": "array", + "kind": "namearray", + "gameField": "ExcludeEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityConditionEditor_UnitEffects", + "description": "", + "modeField": "ExcludeEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "RequireEffects", + "type": "array", + "kind": "namearray", + "gameField": "RequireEffects", + "origin": "derived", + "inheritedFrom": "X2AbilityConditionEditor_UnitEffects", + "description": "", + "modeField": "RequireEffectsMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_AbilityProperty", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_AbilityProperty", + "catchAll": false, + "fields": [ + { + "config": "TargetMustBeInValidTiles", + "type": "bool", + "kind": "scalar", + "gameField": "TargetMustBeInValidTiles", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTargetMustBeInValidTiles" + }, + { + "config": "OwnerHasSoldierAbilities", + "type": "array", + "kind": "namearray", + "gameField": "OwnerHasSoldierAbilities", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "OwnerHasSoldierAbilitiesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_AbilitySourceWeapon", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_AbilitySourceWeapon", + "catchAll": false, + "fields": [ + { + "config": "WantsReload", + "type": "bool", + "kind": "scalar", + "gameField": "WantsReload", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetWantsReload" + }, + { + "config": "CheckAmmo", + "type": "bool", + "kind": "scalar", + "gameField": "CheckAmmo", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCheckAmmo" + }, + { + "config": "CheckAmmoData", + "type": "CheckConfig", + "kind": "scalar", + "gameField": "CheckAmmoData", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCheckAmmoData" + }, + { + "config": "NotLoadedAmmoInSecondaryWeapon", + "type": "bool", + "kind": "scalar", + "gameField": "NotLoadedAmmoInSecondaryWeapon", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNotLoadedAmmoInSecondaryWeapon" + }, + { + "config": "MatchGrenadeType", + "type": "name", + "kind": "scalar", + "gameField": "MatchGrenadeType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMatchGrenadeType" + }, + { + "config": "CheckGrenadeFriendlyFire", + "type": "bool", + "kind": "scalar", + "gameField": "CheckGrenadeFriendlyFire", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCheckGrenadeFriendlyFire" + }, + { + "config": "CheckAmmoTechLevel", + "type": "bool", + "kind": "scalar", + "gameField": "CheckAmmoTechLevel", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCheckAmmoTechLevel" + }, + { + "config": "MatchWeaponTemplate", + "type": "name", + "kind": "scalar", + "gameField": "MatchWeaponTemplate", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMatchWeaponTemplate" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_BattleState", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_BattleState", + "catchAll": false, + "fields": [ + { + "config": "MissionAborted", + "type": "bool", + "kind": "scalar", + "gameField": "bMissionAborted", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMissionAborted" + }, + { + "config": "MissionNotAborted", + "type": "bool", + "kind": "scalar", + "gameField": "bMissionNotAborted", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMissionNotAborted" + }, + { + "config": "CiviliansTargetedByAliens", + "type": "bool", + "kind": "scalar", + "gameField": "bCiviliansTargetedByAliens", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCiviliansTargetedByAliens" + }, + { + "config": "CiviliansNotTargetedByAliens", + "type": "bool", + "kind": "scalar", + "gameField": "bCiviliansNotTargetedByAliens", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCiviliansNotTargetedByAliens" + }, + { + "config": "IncludeTheLostInEngagedCount", + "type": "bool", + "kind": "scalar", + "gameField": "bIncludeTheLostInEngagedCount", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIncludeTheLostInEngagedCount" + }, + { + "config": "MinEngagedEnemies", + "type": "int", + "kind": "scalar", + "gameField": "MinEngagedEnemies", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMinEngagedEnemies" + }, + { + "config": "MaxEngagedEnemies", + "type": "int", + "kind": "scalar", + "gameField": "MaxEngagedEnemies", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMaxEngagedEnemies" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_BerserkerDevastatingPunch", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_BerserkerDevastatingPunch", + "catchAll": false, + "fields": [ + { + "config": "FailOnNonUnitTargets", + "type": "bool", + "kind": "scalar", + "gameField": "bFailOnNonUnitTargets", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFailOnNonUnitTargets" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_Bondmate", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_Bondmate", + "catchAll": false, + "fields": [ + { + "config": "MinBondLevel", + "type": "int", + "kind": "scalar", + "gameField": "MinBondLevel", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMinBondLevel" + }, + { + "config": "MaxBondLevel", + "type": "int", + "kind": "scalar", + "gameField": "MaxBondLevel", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMaxBondLevel" + }, + { + "config": "RequiresAdjacency", + "type": "AdjacencyRequirement", + "kind": "scalar", + "gameField": "RequiresAdjacency", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequiresAdjacency" + }, + { + "config": "SkipCheckWithSource", + "type": "bool", + "kind": "scalar", + "gameField": "bSkipCheckWithSource", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSkipCheckWithSource" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_DarkEvent", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_DarkEvent", + "catchAll": false, + "fields": [ + { + "config": "StilettoRounds", + "type": "bool", + "kind": "scalar", + "gameField": "bStilettoRounds", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStilettoRounds" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_EverVigilant", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_EverVigilant", + "catchAll": false, + "fields": [], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_FuseTarget", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_FuseTarget", + "catchAll": false, + "fields": [], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_GameplayTag", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_GameplayTag", + "catchAll": false, + "fields": [ + { + "config": "RequiredGameplayTag", + "type": "name", + "kind": "scalar", + "gameField": "RequiredGameplayTag", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequiredGameplayTag" + }, + { + "config": "DisallowGameplayTag", + "type": "name", + "kind": "scalar", + "gameField": "DisallowGameplayTag", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDisallowGameplayTag" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_HackingTarget", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_HackingTarget", + "catchAll": false, + "fields": [ + { + "config": "IntrusionProtocol", + "type": "bool", + "kind": "scalar", + "gameField": "bIntrusionProtocol", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIntrusionProtocol" + }, + { + "config": "HaywireProtocol", + "type": "bool", + "kind": "scalar", + "gameField": "bHaywireProtocol", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHaywireProtocol" + }, + { + "config": "RequiredAbilityName", + "type": "name", + "kind": "scalar", + "gameField": "RequiredAbilityName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequiredAbilityName" + }, + { + "config": "MustBeDoor", + "type": "bool", + "kind": "scalar", + "gameField": "bMustBeDoor", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMustBeDoor" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_Interactive", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_Interactive", + "catchAll": false, + "fields": [ + { + "config": "InteractionType", + "type": "UnitInterationType", + "kind": "scalar", + "gameField": "InteractionType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetInteractionType" + }, + { + "config": "RequiredAbilityName", + "type": "name", + "kind": "scalar", + "gameField": "RequiredAbilityName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequiredAbilityName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_Lootable", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_Lootable", + "catchAll": false, + "fields": [ + { + "config": "RestrictRange", + "type": "bool", + "kind": "scalar", + "gameField": "bRestrictRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRestrictRange" + }, + { + "config": "LootableRange", + "type": "int", + "kind": "scalar", + "gameField": "LootableRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetLootableRange" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_MapProperty", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_MapProperty", + "catchAll": false, + "fields": [], + "abstract": false, + "notEditable": [ + { + "name": "AllowedBiomes", + "reason": "array of `string`" + } + ] + }, + { + "class": "X2AbilityConditionEditor_OnGroundTile", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_OnGroundTile", + "catchAll": false, + "fields": [ + { + "config": "NotAFloorTileTag", + "type": "name", + "kind": "scalar", + "gameField": "NotAFloorTileTag", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNotAFloorTileTag" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_PanicOnPod", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_PanicOnPod", + "catchAll": false, + "fields": [ + { + "config": "MaxPanicUnitsPerPod", + "type": "int", + "kind": "scalar", + "gameField": "MaxPanicUnitsPerPod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMaxPanicUnitsPerPod" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_PlayerTurns", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_PlayerTurns", + "catchAll": false, + "fields": [ + { + "config": "NumTurnsCheck", + "type": "CheckConfig", + "kind": "scalar", + "gameField": "NumTurnsCheck", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumTurnsCheck" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_StasisLanceTarget", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_StasisLanceTarget", + "catchAll": false, + "fields": [ + { + "config": "HackAbilityName", + "type": "Name", + "kind": "scalar", + "gameField": "HackAbilityName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHackAbilityName" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_StasisTarget", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_StasisTarget", + "catchAll": false, + "fields": [], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_Stealth", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_Stealth", + "catchAll": false, + "fields": [ + { + "config": "CheckFlanking", + "type": "bool", + "kind": "scalar", + "gameField": "bCheckFlanking", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCheckFlanking" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnblockedNeighborTile", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnblockedNeighborTile", + "catchAll": false, + "fields": [ + { + "config": "RequireVisible", + "type": "bool", + "kind": "scalar", + "gameField": "RequireVisible", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireVisible" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitActionPoints", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitActionPoints", + "catchAll": false, + "fields": [ + { + "config": "ActionPointChecks", + "type": "array", + "kind": "namearray", + "gameField": "m_aCheckValues", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "ActionPointChecksMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitAlertStatus", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitAlertStatus", + "catchAll": false, + "fields": [ + { + "config": "RequiredAlertStatusMaximum", + "type": "int", + "kind": "scalar", + "gameField": "RequiredAlertStatusMaximum", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequiredAlertStatusMaximum" + }, + { + "config": "RequiredAlertStatusMinimum", + "type": "int", + "kind": "scalar", + "gameField": "RequiredAlertStatusMinimum", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequiredAlertStatusMinimum" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitEffects", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitEffects", + "catchAll": false, + "fields": [ + { + "config": "ExcludeEffects", + "type": "array", + "kind": "namearray", + "gameField": "ExcludeEffects", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "ExcludeEffectsMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "RequireEffects", + "type": "array", + "kind": "namearray", + "gameField": "RequireEffects", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "RequireEffectsMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitImmunities", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitImmunities", + "catchAll": false, + "fields": [ + { + "config": "OnlyOnCharacterTemplate", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyOnCharacterTemplate", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyOnCharacterTemplate" + }, + { + "config": "ExcludeDamageTypes", + "type": "array", + "kind": "namearray", + "gameField": "ExcludeDamageTypes", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "ExcludeDamageTypesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitInEvacZone", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitInEvacZone", + "catchAll": false, + "fields": [], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitInteractions", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitInteractions", + "catchAll": false, + "fields": [ + { + "config": "InteractionType", + "type": "UnitInterationType", + "kind": "scalar", + "gameField": "InteractionType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetInteractionType" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitInventory", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitInventory", + "catchAll": false, + "fields": [ + { + "config": "RelevantSlot", + "type": "EInventorySlot", + "kind": "scalar", + "gameField": "RelevantSlot", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRelevantSlot" + }, + { + "config": "ExcludeWeaponCategory", + "type": "name", + "kind": "scalar", + "gameField": "ExcludeWeaponCategory", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeWeaponCategory" + }, + { + "config": "RequireWeaponCategory", + "type": "name", + "kind": "scalar", + "gameField": "RequireWeaponCategory", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireWeaponCategory" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitProperty", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitProperty", + "catchAll": false, + "fields": [ + { + "config": "ExcludeAlive", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeAlive", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeAlive" + }, + { + "config": "ExcludeDead", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeDead", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeDead" + }, + { + "config": "ExcludeRobotic", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeRobotic", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeRobotic" + }, + { + "config": "ExcludeOrganic", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeOrganic", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeOrganic" + }, + { + "config": "ExcludeCivilian", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeCivilian", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeCivilian" + }, + { + "config": "ExcludeNonCivilian", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeNonCivilian", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeNonCivilian" + }, + { + "config": "ExcludeCosmetic", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeCosmetic", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeCosmetic" + }, + { + "config": "ExcludeImpaired", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeImpaired", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeImpaired" + }, + { + "config": "ExcludePanicked", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludePanicked", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludePanicked" + }, + { + "config": "ExcludeInStasis", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeInStasis", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeInStasis" + }, + { + "config": "ExcludeTurret", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeTurret", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeTurret" + }, + { + "config": "ExcludePsionic", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludePsionic", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludePsionic" + }, + { + "config": "ExcludeNonPsionic", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeNonPsionic", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeNonPsionic" + }, + { + "config": "IsAdvent", + "type": "bool", + "kind": "scalar", + "gameField": "IsAdvent", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIsAdvent" + }, + { + "config": "ExcludeAdvent", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeAdvent", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeAdvent" + }, + { + "config": "ExcludeNoCover", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeNoCover", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeNoCover" + }, + { + "config": "ExcludeNoCoverToSource", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeNoCoverToSource", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeNoCoverToSource" + }, + { + "config": "ExcludeFullHealth", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeFullHealth", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeFullHealth" + }, + { + "config": "IsBleedingOut", + "type": "bool", + "kind": "scalar", + "gameField": "IsBleedingOut", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIsBleedingOut" + }, + { + "config": "IsUnspotted", + "type": "bool", + "kind": "scalar", + "gameField": "IsUnspotted", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIsUnspotted" + }, + { + "config": "CanBeCarried", + "type": "bool", + "kind": "scalar", + "gameField": "CanBeCarried", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCanBeCarried" + }, + { + "config": "IsOutdoors", + "type": "bool", + "kind": "scalar", + "gameField": "IsOutdoors", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIsOutdoors" + }, + { + "config": "IsConcealed", + "type": "bool", + "kind": "scalar", + "gameField": "IsConcealed", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIsConcealed" + }, + { + "config": "ExcludeConcealed", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeConcealed", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeConcealed" + }, + { + "config": "IsSuperConcealed", + "type": "bool", + "kind": "scalar", + "gameField": "IsSuperConcealed", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIsSuperConcealed" + }, + { + "config": "IsImpaired", + "type": "bool", + "kind": "scalar", + "gameField": "IsImpaired", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIsImpaired" + }, + { + "config": "HasClearanceToMaxZ", + "type": "bool", + "kind": "scalar", + "gameField": "HasClearanceToMaxZ", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHasClearanceToMaxZ" + }, + { + "config": "ExcludeAlien", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeAlien", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeAlien" + }, + { + "config": "ExcludeNonHumanoidAliens", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeNonHumanoidAliens", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeNonHumanoidAliens" + }, + { + "config": "ExcludeStunned", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeStunned", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeStunned" + }, + { + "config": "ExcludeDazed", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeDazed", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeDazed" + }, + { + "config": "ExcludeUnableToAct", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeUnableToAct", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeUnableToAct" + }, + { + "config": "IsPlayerControlled", + "type": "bool", + "kind": "scalar", + "gameField": "IsPlayerControlled", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIsPlayerControlled" + }, + { + "config": "ExcludeUnrevealedAI", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeUnrevealedAI", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeUnrevealedAI" + }, + { + "config": "IncludeWeakAgainstTechLikeRobot", + "type": "bool", + "kind": "scalar", + "gameField": "IncludeWeakAgainstTechLikeRobot", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIncludeWeakAgainstTechLikeRobot" + }, + { + "config": "ImpairedIgnoresStuns", + "type": "bool", + "kind": "scalar", + "gameField": "ImpairedIgnoresStuns", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetImpairedIgnoresStuns" + }, + { + "config": "IsScampering", + "type": "bool", + "kind": "scalar", + "gameField": "IsScampering", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIsScampering" + }, + { + "config": "ExcludeDeadFromSpecialDeath", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeDeadFromSpecialDeath", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeDeadFromSpecialDeath" + }, + { + "config": "ExcludeLargeUnits", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeLargeUnits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeLargeUnits" + }, + { + "config": "ImpairedIgnoresImpairingMomentarily", + "type": "bool", + "kind": "scalar", + "gameField": "ImpairedIgnoresImpairingMomentarily", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetImpairedIgnoresImpairingMomentarily" + }, + { + "config": "ExcludeHostileToSource", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeHostileToSource", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeHostileToSource" + }, + { + "config": "ExcludeFriendlyToSource", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeFriendlyToSource", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeFriendlyToSource" + }, + { + "config": "TreatMindControlledSquadmateAsHostile", + "type": "bool", + "kind": "scalar", + "gameField": "TreatMindControlledSquadmateAsHostile", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTreatMindControlledSquadmateAsHostile" + }, + { + "config": "ExcludeSquadmates", + "type": "bool", + "kind": "scalar", + "gameField": "ExcludeSquadmates", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeSquadmates" + }, + { + "config": "RequireSquadmates", + "type": "bool", + "kind": "scalar", + "gameField": "RequireSquadmates", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireSquadmates" + }, + { + "config": "RequireWithinRange", + "type": "bool", + "kind": "scalar", + "gameField": "RequireWithinRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireWithinRange" + }, + { + "config": "RequireWithinMinRange", + "type": "bool", + "kind": "scalar", + "gameField": "RequireWithinMinRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireWithinMinRange" + }, + { + "config": "BeingCarriedBySource", + "type": "bool", + "kind": "scalar", + "gameField": "BeingCarriedBySource", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBeingCarriedBySource" + }, + { + "config": "RequireUnitSelectedFromHQ", + "type": "bool", + "kind": "scalar", + "gameField": "RequireUnitSelectedFromHQ", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireUnitSelectedFromHQ" + }, + { + "config": "FailOnNonUnits", + "type": "bool", + "kind": "scalar", + "gameField": "FailOnNonUnits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFailOnNonUnits" + }, + { + "config": "MinRank", + "type": "int", + "kind": "scalar", + "gameField": "MinRank", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMinRank" + }, + { + "config": "MaxRank", + "type": "int", + "kind": "scalar", + "gameField": "MaxRank", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMaxRank" + }, + { + "config": "WithinRange", + "type": "float", + "kind": "scalar", + "gameField": "WithinRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetWithinRange" + }, + { + "config": "WithinMinRange", + "type": "float", + "kind": "scalar", + "gameField": "WithinMinRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetWithinMinRange" + }, + { + "config": "ExcludeSoldierClasses", + "type": "array", + "kind": "namearray", + "gameField": "ExcludeSoldierClasses", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "ExcludeSoldierClassesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "RequireSoldierClasses", + "type": "array", + "kind": "namearray", + "gameField": "RequireSoldierClasses", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "RequireSoldierClassesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitStatCheck", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitStatCheck", + "catchAll": false, + "fields": [ + { + "config": "CheckStats", + "type": "array", + "kind": "namearray", + "gameField": "m_aCheckStats", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "CheckStatsMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitType", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitType", + "catchAll": false, + "fields": [ + { + "config": "IncludeTypes", + "type": "array", + "kind": "namearray", + "gameField": "IncludeTypes", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "IncludeTypesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "ExcludeTypes", + "type": "array", + "kind": "namearray", + "gameField": "ExcludeTypes", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "ExcludeTypesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_UnitValue", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_UnitValue", + "catchAll": false, + "fields": [ + { + "config": "CheckValues", + "type": "array", + "kind": "namearray", + "gameField": "m_aCheckValues", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "CheckValuesMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_Visibility", + "extends": "X2AbilityConditionEditor_Base", + "gameClass": "X2Condition_Visibility", + "catchAll": false, + "fields": [ + { + "config": "NoEnemyViewers", + "type": "bool", + "kind": "scalar", + "gameField": "bNoEnemyViewers", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNoEnemyViewers" + }, + { + "config": "RequireMatchCoverType", + "type": "bool", + "kind": "scalar", + "gameField": "bRequireMatchCoverType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireMatchCoverType" + }, + { + "config": "RequireNotMatchCoverType", + "type": "bool", + "kind": "scalar", + "gameField": "bRequireNotMatchCoverType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireNotMatchCoverType" + }, + { + "config": "TargetCover", + "type": "ECoverType", + "kind": "scalar", + "gameField": "TargetCover", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTargetCover" + }, + { + "config": "CannotPeek", + "type": "bool", + "kind": "scalar", + "gameField": "bCannotPeek", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetCannotPeek" + }, + { + "config": "RequireLOS", + "type": "bool", + "kind": "scalar", + "gameField": "bRequireLOS", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireLOS" + }, + { + "config": "RequireBasicVisibility", + "type": "bool", + "kind": "scalar", + "gameField": "bRequireBasicVisibility", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireBasicVisibility" + }, + { + "config": "RequireGameplayVisible", + "type": "bool", + "kind": "scalar", + "gameField": "bRequireGameplayVisible", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRequireGameplayVisible" + }, + { + "config": "AllowSquadsight", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowSquadsight", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAllowSquadsight" + }, + { + "config": "ActAsSquadsight", + "type": "bool", + "kind": "scalar", + "gameField": "bActAsSquadsight", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetActAsSquadsight" + }, + { + "config": "VisibleToAnyAlly", + "type": "bool", + "kind": "scalar", + "gameField": "bVisibleToAnyAlly", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetVisibleToAnyAlly" + }, + { + "config": "DisablePeeksOnMovement", + "type": "bool", + "kind": "scalar", + "gameField": "bDisablePeeksOnMovement", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDisablePeeksOnMovement" + }, + { + "config": "ExcludeGameplayVisible", + "type": "bool", + "kind": "scalar", + "gameField": "bExcludeGameplayVisible", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeGameplayVisible" + }, + { + "config": "RequireGameplayVisibleTags", + "type": "array", + "kind": "namearray", + "gameField": "RequireGameplayVisibleTags", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "RequireGameplayVisibleTagsMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityConditionEditor_Base", + "extends": "X2AbilityConditionEditor", + "gameClass": null, + "catchAll": true, + "fields": [] + } + ] + }, + { + "name": "ToHitCalc", + "configKey": "ToHitCalc", + "editStruct": "ToHitCalcEdit", + "wired": true, + "dispatchOrder": [ + "X2AbilityToHitCalcEditor_StatCheck_UnitVsUnit", + "X2AbilityToHitCalcEditor_PercentChancePlusFocus", + "X2AbilityToHitCalcEditor_PercentChanceWithBuddyZone", + "X2AbilityToHitCalcEditor_StandardAim", + "X2AbilityToHitCalcEditor_PercentChance", + "X2AbilityToHitCalcEditor_Hacking", + "X2AbilityToHitCalcEditor_RollStat", + "X2AbilityToHitCalcEditor_RollStatTiers", + "X2AbilityToHitCalcEditor_StatCheck", + "X2AbilityToHitCalcEditor_Base" + ], + "intro": "Edits the template's to-hit calculation. Two slots exist: `ToHitCalc` (`Template.AbilityToHitCalc`) and `ToHitOwnerOnMissCalc` (`Template.AbilityToHitOwnerOnMissCalc`), both taking a `ToHitCalcEdit` block. With `Class` **omitted**, the existing calc is edited **in place**; with `Class` set, the existing calc is edited in place when it is already exactly that class, otherwise it is **replaced** by a new instance (unset fields then take class defaults). Classes without a dedicated editor below (e.g. `X2AbilityToHitCalc_StandardMelee`, `X2AbilityToHitCalc_DeadEye`) are still valid `Class` values — they get the fields of their nearest listed ancestor.", + "editors": [ + { + "class": "X2AbilityToHitCalcEditor_StatCheck_UnitVsUnit", + "extends": "X2AbilityToHitCalcEditor_StatCheck", + "gameClass": "X2AbilityToHitCalc_StatCheck_UnitVsUnit", + "catchAll": false, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + }, + { + "config": "AttackerStat", + "type": "ECharStatType", + "kind": "scalar", + "gameField": "AttackerStat", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAttackerStat" + }, + { + "config": "DefenderStat", + "type": "ECharStatType", + "kind": "scalar", + "gameField": "DefenderStat", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDefenderStat" + }, + { + "config": "BaseValue", + "type": "int", + "kind": "scalar", + "gameField": "BaseValue", + "origin": "derived", + "inheritedFrom": "X2AbilityToHitCalcEditor_StatCheck", + "description": "", + "guard": "SetBaseValue" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityToHitCalcEditor_PercentChancePlusFocus", + "extends": "X2AbilityToHitCalcEditor_PercentChance", + "gameClass": "X2AbilityToHitCalc_PercentChancePlusFocus", + "catchAll": false, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + }, + { + "config": "FocusMultiplier", + "type": "int", + "kind": "scalar", + "gameField": "FocusMultiplier", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFocusMultiplier" + }, + { + "config": "PercentToHit", + "type": "int", + "kind": "scalar", + "gameField": "PercentToHit", + "origin": "derived", + "inheritedFrom": "X2AbilityToHitCalcEditor_PercentChance", + "description": "", + "guard": "SetPercentToHit" + }, + { + "config": "NoGameStateOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bNoGameStateOnMiss", + "origin": "derived", + "inheritedFrom": "X2AbilityToHitCalcEditor_PercentChance", + "description": "", + "guard": "SetNoGameStateOnMiss" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityToHitCalcEditor_PercentChanceWithBuddyZone", + "extends": "X2AbilityToHitCalcEditor_PercentChance", + "gameClass": "X2AbilityToHitCalc_PercentChanceWithBuddyZone", + "catchAll": false, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + }, + { + "config": "PercentToHitInBuddyZone", + "type": "int", + "kind": "scalar", + "gameField": "PercentToHitInBuddyZone", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPercentToHitInBuddyZone" + }, + { + "config": "PercentToHit", + "type": "int", + "kind": "scalar", + "gameField": "PercentToHit", + "origin": "derived", + "inheritedFrom": "X2AbilityToHitCalcEditor_PercentChance", + "description": "", + "guard": "SetPercentToHit" + }, + { + "config": "NoGameStateOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bNoGameStateOnMiss", + "origin": "derived", + "inheritedFrom": "X2AbilityToHitCalcEditor_PercentChance", + "description": "", + "guard": "SetNoGameStateOnMiss" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityToHitCalcEditor_StandardAim", + "extends": "X2AbilityToHitCalcEditor_Base", + "gameClass": "X2AbilityToHitCalc_StandardAim", + "catchAll": false, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + }, + { + "config": "IndirectFire", + "type": "bool", + "kind": "scalar", + "gameField": "bIndirectFire", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIndirectFire" + }, + { + "config": "MeleeAttack", + "type": "bool", + "kind": "scalar", + "gameField": "bMeleeAttack", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMeleeAttack" + }, + { + "config": "ReactionFire", + "type": "bool", + "kind": "scalar", + "gameField": "bReactionFire", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetReactionFire" + }, + { + "config": "AllowCrit", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowCrit", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAllowCrit" + }, + { + "config": "HitsAreCrits", + "type": "bool", + "kind": "scalar", + "gameField": "bHitsAreCrits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetHitsAreCrits" + }, + { + "config": "MultiTargetOnly", + "type": "bool", + "kind": "scalar", + "gameField": "bMultiTargetOnly", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMultiTargetOnly" + }, + { + "config": "OnlyMultiHitWithSuccess", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyMultiHitWithSuccess", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyMultiHitWithSuccess" + }, + { + "config": "GuaranteedHit", + "type": "bool", + "kind": "scalar", + "gameField": "bGuaranteedHit", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetGuaranteedHit" + }, + { + "config": "IgnoreCoverBonus", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreCoverBonus", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIgnoreCoverBonus" + }, + { + "config": "FinalMultiplier", + "type": "float", + "kind": "scalar", + "gameField": "FinalMultiplier", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFinalMultiplier" + }, + { + "config": "BuiltInHitMod", + "type": "int", + "kind": "scalar", + "gameField": "BuiltInHitMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBuiltInHitMod" + }, + { + "config": "BuiltInCritMod", + "type": "int", + "kind": "scalar", + "gameField": "BuiltInCritMod", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBuiltInCritMod" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityToHitCalcEditor_PercentChance", + "extends": "X2AbilityToHitCalcEditor_Base", + "gameClass": "X2AbilityToHitCalc_PercentChance", + "catchAll": false, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + }, + { + "config": "PercentToHit", + "type": "int", + "kind": "scalar", + "gameField": "PercentToHit", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPercentToHit" + }, + { + "config": "NoGameStateOnMiss", + "type": "bool", + "kind": "scalar", + "gameField": "bNoGameStateOnMiss", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNoGameStateOnMiss" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityToHitCalcEditor_Hacking", + "extends": "X2AbilityToHitCalcEditor_Base", + "gameClass": "X2AbilityToHitCalc_Hacking", + "catchAll": false, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + }, + { + "config": "AlwaysSucceed", + "type": "bool", + "kind": "scalar", + "gameField": "bAlwaysSucceed", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAlwaysSucceed" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityToHitCalcEditor_RollStat", + "extends": "X2AbilityToHitCalcEditor_Base", + "gameClass": "X2AbilityToHitCalc_RollStat", + "catchAll": false, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + }, + { + "config": "StatToRoll", + "type": "ECharStatType", + "kind": "scalar", + "gameField": "StatToRoll", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStatToRoll" + }, + { + "config": "BaseChance", + "type": "int", + "kind": "scalar", + "gameField": "BaseChance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBaseChance" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityToHitCalcEditor_RollStatTiers", + "extends": "X2AbilityToHitCalcEditor_Base", + "gameClass": "X2AbilityToHitCalc_RollStatTiers", + "catchAll": false, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + }, + { + "config": "StatToRoll", + "type": "ECharStatType", + "kind": "scalar", + "gameField": "StatToRoll", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetStatToRoll" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityToHitCalcEditor_StatCheck", + "extends": "X2AbilityToHitCalcEditor_Base", + "gameClass": "X2AbilityToHitCalc_StatCheck", + "catchAll": false, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + }, + { + "config": "BaseValue", + "type": "int", + "kind": "scalar", + "gameField": "BaseValue", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetBaseValue" + } + ], + "abstract": true, + "notEditable": [] + }, + { + "class": "X2AbilityToHitCalcEditor_Base", + "extends": "X2AbilityToHitCalcEditor", + "gameClass": null, + "catchAll": true, + "fields": [ + { + "config": "HitModifiers", + "type": "array", + "kind": "namearray", + "gameField": "HitModifiers", + "origin": "base", + "inheritedFrom": "X2AbilityToHitCalcEditor", + "description": "Replace-only: when non-empty, replaces the calc's HitModifiers array entirely", + "replaceOnly": true + } + ] + } + ] + }, + { + "name": "TargetStyle", + "configKey": "TargetStyle", + "editStruct": "TargetStyleEdit", + "wired": true, + "dispatchOrder": [ + "X2AbilityTargetStyleEditor_MovingMelee", + "X2AbilityTargetStyleEditor_Single", + "X2AbilityTargetStyleEditor_Cursor", + "X2AbilityTargetStyleEditor_Base" + ], + "intro": "Edits `Template.AbilityTargetStyle` (how the ability picks its primary target). Same in-place/replace semantics as `ToHitCalc`. Field-less styles (`X2AbilityTarget_Self`, `X2AbilityTarget_Path`, ...) are valid `Class` values for swapping the style.", + "editors": [ + { + "class": "X2AbilityTargetStyleEditor_MovingMelee", + "extends": "X2AbilityTargetStyleEditor_Single", + "gameClass": "X2AbilityTarget_MovingMelee", + "catchAll": false, + "fields": [ + { + "config": "MovementRangeAdjustment", + "type": "int", + "kind": "scalar", + "gameField": "MovementRangeAdjustment", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMovementRangeAdjustment" + }, + { + "config": "OnlyIncludeTargetsInsideWeaponRange", + "type": "bool", + "kind": "scalar", + "gameField": "OnlyIncludeTargetsInsideWeaponRange", + "origin": "derived", + "inheritedFrom": "X2AbilityTargetStyleEditor_Single", + "description": "", + "guard": "SetOnlyIncludeTargetsInsideWeaponRange" + }, + { + "config": "AllowInteractiveObjects", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowInteractiveObjects", + "origin": "derived", + "inheritedFrom": "X2AbilityTargetStyleEditor_Single", + "description": "", + "guard": "SetAllowInteractiveObjects" + }, + { + "config": "AllowDestructibleObjects", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowDestructibleObjects", + "origin": "derived", + "inheritedFrom": "X2AbilityTargetStyleEditor_Single", + "description": "", + "guard": "SetAllowDestructibleObjects" + }, + { + "config": "IncludeSelf", + "type": "bool", + "kind": "scalar", + "gameField": "bIncludeSelf", + "origin": "derived", + "inheritedFrom": "X2AbilityTargetStyleEditor_Single", + "description": "", + "guard": "SetIncludeSelf" + }, + { + "config": "ShowAOE", + "type": "bool", + "kind": "scalar", + "gameField": "bShowAOE", + "origin": "derived", + "inheritedFrom": "X2AbilityTargetStyleEditor_Single", + "description": "", + "guard": "SetShowAOE" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityTargetStyleEditor_Single", + "extends": "X2AbilityTargetStyleEditor_Base", + "gameClass": "X2AbilityTarget_Single", + "catchAll": false, + "fields": [ + { + "config": "OnlyIncludeTargetsInsideWeaponRange", + "type": "bool", + "kind": "scalar", + "gameField": "OnlyIncludeTargetsInsideWeaponRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyIncludeTargetsInsideWeaponRange" + }, + { + "config": "AllowInteractiveObjects", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowInteractiveObjects", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAllowInteractiveObjects" + }, + { + "config": "AllowDestructibleObjects", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowDestructibleObjects", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAllowDestructibleObjects" + }, + { + "config": "IncludeSelf", + "type": "bool", + "kind": "scalar", + "gameField": "bIncludeSelf", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIncludeSelf" + }, + { + "config": "ShowAOE", + "type": "bool", + "kind": "scalar", + "gameField": "bShowAOE", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetShowAOE" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityTargetStyleEditor_Cursor", + "extends": "X2AbilityTargetStyleEditor_Base", + "gameClass": "X2AbilityTarget_Cursor", + "catchAll": false, + "fields": [ + { + "config": "RestrictToWeaponRange", + "type": "bool", + "kind": "scalar", + "gameField": "bRestrictToWeaponRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRestrictToWeaponRange" + }, + { + "config": "IncreaseWeaponRange", + "type": "int", + "kind": "scalar", + "gameField": "IncreaseWeaponRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIncreaseWeaponRange" + }, + { + "config": "RestrictToSquadsightRange", + "type": "bool", + "kind": "scalar", + "gameField": "bRestrictToSquadsightRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRestrictToSquadsightRange" + }, + { + "config": "FixedAbilityRange", + "type": "int", + "kind": "scalar", + "gameField": "FixedAbilityRange", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetFixedAbilityRange" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityTargetStyleEditor_Base", + "extends": "X2AbilityTargetStyleEditor", + "gameClass": null, + "catchAll": true, + "fields": [] + } + ] + }, + { + "name": "MultiTargetStyle", + "configKey": "MultiTargetStyle", + "editStruct": "MultiTargetStyleEdit", + "wired": true, + "dispatchOrder": [ + "X2AbilityMultiTargetStyleEditor_Cone", + "X2AbilityMultiTargetStyleEditor_Cylinder", + "X2AbilityMultiTargetStyleEditor_AllUnits", + "X2AbilityMultiTargetStyleEditor_ClaymoreRadius", + "X2AbilityMultiTargetStyleEditor_Radius", + "X2AbilityMultiTargetStyleEditor_Line", + "X2AbilityMultiTargetStyleEditor_BurstFire", + "X2AbilityMultiTargetStyleEditor_Base" + ], + "intro": "Edits the template's multi-target styles. Two slots exist: `MultiTargetStyle` (`Template.AbilityMultiTargetStyle`) and `PassiveAOEStyle` (`Template.AbilityPassiveAOEStyle`), both taking a `MultiTargetStyleEdit` block. Same in-place/replace semantics as `ToHitCalc`.", + "editors": [ + { + "class": "X2AbilityMultiTargetStyleEditor_Cone", + "extends": "X2AbilityMultiTargetStyleEditor_Radius", + "gameClass": "X2AbilityMultiTarget_Cone", + "catchAll": false, + "fields": [ + { + "config": "AllowSameTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowSameTarget", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetAllowSameTarget" + }, + { + "config": "UseSourceWeaponLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourceWeaponLocation", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetUseSourceWeaponLocation" + }, + { + "config": "NumTargetsRequired", + "type": "int", + "kind": "scalar", + "gameField": "NumTargetsRequired", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetNumTargetsRequired" + }, + { + "config": "ConeEndDiameter", + "type": "float", + "kind": "scalar", + "gameField": "ConeEndDiameter", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConeEndDiameter" + }, + { + "config": "ConeLength", + "type": "float", + "kind": "scalar", + "gameField": "ConeLength", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetConeLength" + }, + { + "config": "UseWeaponRangeForLength", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponRangeForLength", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseWeaponRangeForLength" + }, + { + "config": "LockShooterZ", + "type": "bool", + "kind": "scalar", + "gameField": "bLockShooterZ", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetLockShooterZ" + }, + { + "config": "AbilityBonusCones", + "type": "array", + "kind": "namearray", + "gameField": "AbilityBonusCones", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "AbilityBonusConesMode", + "modeEnum": "ENameArrayEditMode" + }, + { + "config": "UseWeaponRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetUseWeaponRadius" + }, + { + "config": "UseWeaponBlockingCoverFlag", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponBlockingCoverFlag", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetUseWeaponBlockingCoverFlag" + }, + { + "config": "IgnoreBlockingCover", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreBlockingCover", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetIgnoreBlockingCover" + }, + { + "config": "TargetRadius", + "type": "float", + "kind": "scalar", + "gameField": "fTargetRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetTargetRadius" + }, + { + "config": "TargetCoveragePercentage", + "type": "float", + "kind": "scalar", + "gameField": "fTargetCoveragePercentage", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetTargetCoveragePercentage" + }, + { + "config": "AddPrimaryTargetAsMultiTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAddPrimaryTargetAsMultiTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetAddPrimaryTargetAsMultiTarget" + }, + { + "config": "AllowDeadMultiTargetUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowDeadMultiTargetUnits", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetAllowDeadMultiTargetUnits" + }, + { + "config": "ExcludeSelfAsTargetIfWithinRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bExcludeSelfAsTargetIfWithinRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetExcludeSelfAsTargetIfWithinRadius" + }, + { + "config": "AbilityBonusRadii", + "type": "array", + "kind": "namearray", + "gameField": "AbilityBonusRadii", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "modeField": "AbilityBonusRadiiMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityMultiTargetStyleEditor_Cylinder", + "extends": "X2AbilityMultiTargetStyleEditor_Radius", + "gameClass": "X2AbilityMultiTarget_Cylinder", + "catchAll": false, + "fields": [ + { + "config": "AllowSameTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowSameTarget", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetAllowSameTarget" + }, + { + "config": "UseSourceWeaponLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourceWeaponLocation", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetUseSourceWeaponLocation" + }, + { + "config": "NumTargetsRequired", + "type": "int", + "kind": "scalar", + "gameField": "NumTargetsRequired", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetNumTargetsRequired" + }, + { + "config": "TargetHeight", + "type": "float", + "kind": "scalar", + "gameField": "fTargetHeight", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTargetHeight" + }, + { + "config": "UseOnlyGroundTiles", + "type": "bool", + "kind": "scalar", + "gameField": "bUseOnlyGroundTiles", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseOnlyGroundTiles" + }, + { + "config": "UseWeaponRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetUseWeaponRadius" + }, + { + "config": "UseWeaponBlockingCoverFlag", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponBlockingCoverFlag", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetUseWeaponBlockingCoverFlag" + }, + { + "config": "IgnoreBlockingCover", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreBlockingCover", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetIgnoreBlockingCover" + }, + { + "config": "TargetRadius", + "type": "float", + "kind": "scalar", + "gameField": "fTargetRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetTargetRadius" + }, + { + "config": "TargetCoveragePercentage", + "type": "float", + "kind": "scalar", + "gameField": "fTargetCoveragePercentage", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetTargetCoveragePercentage" + }, + { + "config": "AddPrimaryTargetAsMultiTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAddPrimaryTargetAsMultiTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetAddPrimaryTargetAsMultiTarget" + }, + { + "config": "AllowDeadMultiTargetUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowDeadMultiTargetUnits", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetAllowDeadMultiTargetUnits" + }, + { + "config": "ExcludeSelfAsTargetIfWithinRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bExcludeSelfAsTargetIfWithinRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetExcludeSelfAsTargetIfWithinRadius" + }, + { + "config": "AbilityBonusRadii", + "type": "array", + "kind": "namearray", + "gameField": "AbilityBonusRadii", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "modeField": "AbilityBonusRadiiMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityMultiTargetStyleEditor_AllUnits", + "extends": "X2AbilityMultiTargetStyleEditor_Radius", + "gameClass": "X2AbilityMultiTarget_AllUnits", + "catchAll": false, + "fields": [ + { + "config": "AllowSameTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowSameTarget", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetAllowSameTarget" + }, + { + "config": "UseSourceWeaponLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourceWeaponLocation", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetUseSourceWeaponLocation" + }, + { + "config": "NumTargetsRequired", + "type": "int", + "kind": "scalar", + "gameField": "NumTargetsRequired", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetNumTargetsRequired" + }, + { + "config": "OnlyAllyOfType", + "type": "name", + "kind": "scalar", + "gameField": "OnlyAllyOfType", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyAllyOfType" + }, + { + "config": "AcceptFriendlyUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bAcceptFriendlyUnits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAcceptFriendlyUnits" + }, + { + "config": "AcceptEnemyUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bAcceptEnemyUnits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAcceptEnemyUnits" + }, + { + "config": "OnlyAcceptRoboticUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyAcceptRoboticUnits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyAcceptRoboticUnits" + }, + { + "config": "OnlyAcceptAlienUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyAcceptAlienUnits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyAcceptAlienUnits" + }, + { + "config": "OnlyAcceptAdventUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bOnlyAcceptAdventUnits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetOnlyAcceptAdventUnits" + }, + { + "config": "RandomlySelectOne", + "type": "bool", + "kind": "scalar", + "gameField": "bRandomlySelectOne", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRandomlySelectOne" + }, + { + "config": "DontAcceptNeutralUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bDontAcceptNeutralUnits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetDontAcceptNeutralUnits" + }, + { + "config": "RandomChance", + "type": "int", + "kind": "scalar", + "gameField": "RandomChance", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetRandomChance" + }, + { + "config": "UseAbilitySourceAsPrimaryTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bUseAbilitySourceAsPrimaryTarget", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseAbilitySourceAsPrimaryTarget" + }, + { + "config": "UseWeaponRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetUseWeaponRadius" + }, + { + "config": "UseWeaponBlockingCoverFlag", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponBlockingCoverFlag", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetUseWeaponBlockingCoverFlag" + }, + { + "config": "IgnoreBlockingCover", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreBlockingCover", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetIgnoreBlockingCover" + }, + { + "config": "TargetRadius", + "type": "float", + "kind": "scalar", + "gameField": "fTargetRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetTargetRadius" + }, + { + "config": "TargetCoveragePercentage", + "type": "float", + "kind": "scalar", + "gameField": "fTargetCoveragePercentage", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetTargetCoveragePercentage" + }, + { + "config": "AddPrimaryTargetAsMultiTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAddPrimaryTargetAsMultiTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetAddPrimaryTargetAsMultiTarget" + }, + { + "config": "AllowDeadMultiTargetUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowDeadMultiTargetUnits", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetAllowDeadMultiTargetUnits" + }, + { + "config": "ExcludeSelfAsTargetIfWithinRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bExcludeSelfAsTargetIfWithinRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetExcludeSelfAsTargetIfWithinRadius" + }, + { + "config": "AbilityBonusRadii", + "type": "array", + "kind": "namearray", + "gameField": "AbilityBonusRadii", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "modeField": "AbilityBonusRadiiMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityMultiTargetStyleEditor_ClaymoreRadius", + "extends": "X2AbilityMultiTargetStyleEditor_Radius", + "gameClass": "X2AbilityMultiTarget_ClaymoreRadius", + "catchAll": false, + "fields": [ + { + "config": "AllowSameTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowSameTarget", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetAllowSameTarget" + }, + { + "config": "UseSourceWeaponLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourceWeaponLocation", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetUseSourceWeaponLocation" + }, + { + "config": "NumTargetsRequired", + "type": "int", + "kind": "scalar", + "gameField": "NumTargetsRequired", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetNumTargetsRequired" + }, + { + "config": "ClaymoreEnvironmentalDamage", + "type": "int", + "kind": "scalar", + "gameField": "ClaymoreEnvironmentalDamage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetClaymoreEnvironmentalDamage" + }, + { + "config": "UseWeaponRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetUseWeaponRadius" + }, + { + "config": "UseWeaponBlockingCoverFlag", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponBlockingCoverFlag", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetUseWeaponBlockingCoverFlag" + }, + { + "config": "IgnoreBlockingCover", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreBlockingCover", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetIgnoreBlockingCover" + }, + { + "config": "TargetRadius", + "type": "float", + "kind": "scalar", + "gameField": "fTargetRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetTargetRadius" + }, + { + "config": "TargetCoveragePercentage", + "type": "float", + "kind": "scalar", + "gameField": "fTargetCoveragePercentage", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetTargetCoveragePercentage" + }, + { + "config": "AddPrimaryTargetAsMultiTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAddPrimaryTargetAsMultiTarget", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetAddPrimaryTargetAsMultiTarget" + }, + { + "config": "AllowDeadMultiTargetUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowDeadMultiTargetUnits", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetAllowDeadMultiTargetUnits" + }, + { + "config": "ExcludeSelfAsTargetIfWithinRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bExcludeSelfAsTargetIfWithinRadius", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "guard": "SetExcludeSelfAsTargetIfWithinRadius" + }, + { + "config": "AbilityBonusRadii", + "type": "array", + "kind": "namearray", + "gameField": "AbilityBonusRadii", + "origin": "derived", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor_Radius", + "description": "", + "modeField": "AbilityBonusRadiiMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityMultiTargetStyleEditor_Radius", + "extends": "X2AbilityMultiTargetStyleEditor_Base", + "gameClass": "X2AbilityMultiTarget_Radius", + "catchAll": false, + "fields": [ + { + "config": "AllowSameTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowSameTarget", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetAllowSameTarget" + }, + { + "config": "UseSourceWeaponLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourceWeaponLocation", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetUseSourceWeaponLocation" + }, + { + "config": "NumTargetsRequired", + "type": "int", + "kind": "scalar", + "gameField": "NumTargetsRequired", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetNumTargetsRequired" + }, + { + "config": "UseWeaponRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponRadius", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseWeaponRadius" + }, + { + "config": "UseWeaponBlockingCoverFlag", + "type": "bool", + "kind": "scalar", + "gameField": "bUseWeaponBlockingCoverFlag", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetUseWeaponBlockingCoverFlag" + }, + { + "config": "IgnoreBlockingCover", + "type": "bool", + "kind": "scalar", + "gameField": "bIgnoreBlockingCover", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetIgnoreBlockingCover" + }, + { + "config": "TargetRadius", + "type": "float", + "kind": "scalar", + "gameField": "fTargetRadius", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTargetRadius" + }, + { + "config": "TargetCoveragePercentage", + "type": "float", + "kind": "scalar", + "gameField": "fTargetCoveragePercentage", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTargetCoveragePercentage" + }, + { + "config": "AddPrimaryTargetAsMultiTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAddPrimaryTargetAsMultiTarget", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAddPrimaryTargetAsMultiTarget" + }, + { + "config": "AllowDeadMultiTargetUnits", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowDeadMultiTargetUnits", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetAllowDeadMultiTargetUnits" + }, + { + "config": "ExcludeSelfAsTargetIfWithinRadius", + "type": "bool", + "kind": "scalar", + "gameField": "bExcludeSelfAsTargetIfWithinRadius", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetExcludeSelfAsTargetIfWithinRadius" + }, + { + "config": "AbilityBonusRadii", + "type": "array", + "kind": "namearray", + "gameField": "AbilityBonusRadii", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "AbilityBonusRadiiMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityMultiTargetStyleEditor_Line", + "extends": "X2AbilityMultiTargetStyleEditor_Base", + "gameClass": "X2AbilityMultiTarget_Line", + "catchAll": false, + "fields": [ + { + "config": "AllowSameTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowSameTarget", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetAllowSameTarget" + }, + { + "config": "UseSourceWeaponLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourceWeaponLocation", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetUseSourceWeaponLocation" + }, + { + "config": "NumTargetsRequired", + "type": "int", + "kind": "scalar", + "gameField": "NumTargetsRequired", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetNumTargetsRequired" + }, + { + "config": "TileWidthExtension", + "type": "int", + "kind": "scalar", + "gameField": "TileWidthExtension", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetTileWidthExtension" + }, + { + "config": "SightRangeLimited", + "type": "bool", + "kind": "scalar", + "gameField": "bSightRangeLimited", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetSightRangeLimited" + }, + { + "config": "AbilityBonusWidths", + "type": "array", + "kind": "namearray", + "gameField": "AbilityBonusWidths", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "modeField": "AbilityBonusWidthsMode", + "modeEnum": "ENameArrayEditMode" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityMultiTargetStyleEditor_BurstFire", + "extends": "X2AbilityMultiTargetStyleEditor_Base", + "gameClass": "X2AbilityMultiTarget_BurstFire", + "catchAll": false, + "fields": [ + { + "config": "AllowSameTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowSameTarget", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetAllowSameTarget" + }, + { + "config": "UseSourceWeaponLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourceWeaponLocation", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetUseSourceWeaponLocation" + }, + { + "config": "NumTargetsRequired", + "type": "int", + "kind": "scalar", + "gameField": "NumTargetsRequired", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetNumTargetsRequired" + }, + { + "config": "NumExtraShots", + "type": "int", + "kind": "scalar", + "gameField": "NumExtraShots", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetNumExtraShots" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityMultiTargetStyleEditor_Base", + "extends": "X2AbilityMultiTargetStyleEditor", + "gameClass": null, + "catchAll": true, + "fields": [ + { + "config": "AllowSameTarget", + "type": "bool", + "kind": "scalar", + "gameField": "bAllowSameTarget", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetAllowSameTarget" + }, + { + "config": "UseSourceWeaponLocation", + "type": "bool", + "kind": "scalar", + "gameField": "bUseSourceWeaponLocation", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetUseSourceWeaponLocation" + }, + { + "config": "NumTargetsRequired", + "type": "int", + "kind": "scalar", + "gameField": "NumTargetsRequired", + "origin": "base", + "inheritedFrom": "X2AbilityMultiTargetStyleEditor", + "description": "", + "guard": "SetNumTargetsRequired" + } + ] + } + ] + }, + { + "name": "Triggers", + "configKey": "Triggers", + "editStruct": "TriggerEdit", + "wired": true, + "dispatchOrder": [ + "X2AbilityTriggerEditor_UnitPostBeginPlay", + "X2AbilityTriggerEditor_EventListener", + "X2AbilityTriggerEditor_Event", + "X2AbilityTriggerEditor_Base" + ], + "intro": "Edits the `AbilityTriggers` array of the template. The trigger of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`. **Caveat:** adding a *new* `X2AbilityTrigger_EventListener` from config is rarely useful — its `ListenerData.EventFn` delegate can only be assigned in code and stays `none`. Editing an existing listener trigger preserves its `EventFn`. `X2AbilityTrigger_OnAbilityActivated` is handled by the EventListener editor (its `MatchAbilityActivated` field is protected and cannot be set). See also `AbilityEventListenerEdits` in the template fields for the separate `Template.AbilityEventListeners` array.", + "editors": [ + { + "class": "X2AbilityTriggerEditor_UnitPostBeginPlay", + "extends": "X2AbilityTriggerEditor_Base", + "gameClass": "X2AbilityTrigger_UnitPostBeginPlay", + "catchAll": false, + "fields": [ + { + "config": "Priority", + "type": "int", + "kind": "scalar", + "gameField": "Priority", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetPriority" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityTriggerEditor_EventListener", + "extends": "X2AbilityTriggerEditor_Base", + "gameClass": "X2AbilityTrigger_EventListener", + "catchAll": false, + "fields": [ + { + "config": "ListenerEventID", + "type": "name", + "kind": "scalar", + "gameField": "ListenerData.EventID", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetListenerEventID" + }, + { + "config": "ListenerDeferral", + "type": "EventListenerDeferral", + "kind": "scalar", + "gameField": "ListenerData.Deferral", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetListenerDeferral" + }, + { + "config": "ListenerFilter", + "type": "AbilityEventFilter", + "kind": "scalar", + "gameField": "ListenerData.Filter", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetListenerFilter" + }, + { + "config": "ListenerPriority", + "type": "int", + "kind": "scalar", + "gameField": "ListenerData.Priority", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetListenerPriority" + } + ], + "abstract": false, + "notEditable": [] + }, + { + "class": "X2AbilityTriggerEditor_Event", + "extends": "X2AbilityTriggerEditor_Base", + "gameClass": "X2AbilityTrigger_Event", + "catchAll": false, + "fields": [ + { + "config": "MethodName", + "type": "name", + "kind": "scalar", + "gameField": "MethodName", + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetMethodName" + }, + { + "config": "EventObserverClass", + "type": "string", + "kind": "scalar", + "gameField": null, + "origin": "derived", + "inheritedFrom": null, + "description": "", + "guard": "SetEventObserverClass" + } + ], + "abstract": false, + "notEditable": [ + { + "name": "EventObserverClass", + "reason": "class reference" + } + ] + }, + { + "class": "X2AbilityTriggerEditor_Base", + "extends": "X2AbilityTriggerEditor", + "gameClass": null, + "catchAll": true, + "fields": [] + } + ] + } + ], + "warnings": [] +} From 183d9e6cd15c658c24705724b96b58c988cdafab Mon Sep 17 00:00:00 2001 From: Boundir <30468080+boundir@users.noreply.github.com> Date: Tue, 22 Sep 2026 17:06:47 +0200 Subject: [PATCH 2/4] Hash independent of line endings --- .scripts/generate-docs.ps1 | 1 + docs/schema.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.scripts/generate-docs.ps1 b/.scripts/generate-docs.ps1 index e5b2749..1a8f44a 100644 --- a/.scripts/generate-docs.ps1 +++ b/.scripts/generate-docs.ps1 @@ -57,6 +57,7 @@ function Get-SourceHash { $files = @(Get-ChildItem -LiteralPath $Path -Filter '*.uc' -File | Sort-Object Name) $text = ($files | ForEach-Object { [System.IO.File]::ReadAllText($_.FullName) }) -join "`n" + $text = $text -replace "`r`n", "`n" -replace "`r", "`n" $sha256 = [System.Security.Cryptography.SHA256]::Create() try { diff --git a/docs/schema.json b/docs/schema.json index 831f81f..8f6fd2d 100644 --- a/docs/schema.json +++ b/docs/schema.json @@ -1,6 +1,6 @@ { "$comment": "Generated by .scripts/generate-docs.ps1 - do not edit by hand.", - "sourceHash": "4c1e871da9a4143c8c91044046b77d37a79788b7463ed01f5ca52f1ec3bce02d", + "sourceHash": "137b302f4e4d45b5be645dbaeb9d107361eff7b1613d515785ff9d424cf342cf", "enums": [ { "name": "EStatChangeMode", From 59f54c874d57b5594fa2362e984cba3ddf44605b Mon Sep 17 00:00:00 2001 From: Boundir <30468080+boundir@users.noreply.github.com> Date: Tue, 22 Sep 2026 19:24:36 +0200 Subject: [PATCH 3/4] Moves the reference documentation to a mkdocs site --- .github/workflows/docs.yml | 67 + .github/workflows/schema-check.yml | 42 + .gitignore | 4 + .scripts/generate-docs.ps1 | 215 +- .../Config/2.0/XComAbilityEditor.ini | 63 - .../Classes/AE_DataStructures.uc | 2 +- CHANGELOG.md | 30 +- README.md | 4987 +---------------- docs/contributing/adding-an-editor.md | 161 + docs/getting-started/config-syntax.md | 124 + docs/getting-started/installation.md | 51 + docs/guides/bridge-mods.md | 94 + docs/guides/examples.md | 148 + docs/guides/legacy-1x.md | 63 + docs/guides/troubleshooting.md | 119 + docs/index.md | 66 + docs/schema.json | 20 +- mkdocs.yml | 81 + requirements-docs.txt | 5 + scripts/ae_render.py | 149 + scripts/gen_coverage.py | 124 + scripts/gen_reference.py | 322 ++ 22 files changed, 1695 insertions(+), 5242 deletions(-) create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/schema-check.yml delete mode 100644 AbilityEditor/Config/2.0/XComAbilityEditor.ini create mode 100644 docs/contributing/adding-an-editor.md create mode 100644 docs/getting-started/config-syntax.md create mode 100644 docs/getting-started/installation.md create mode 100644 docs/guides/bridge-mods.md create mode 100644 docs/guides/examples.md create mode 100644 docs/guides/legacy-1x.md create mode 100644 docs/guides/troubleshooting.md create mode 100644 docs/index.md create mode 100644 mkdocs.yml create mode 100644 requirements-docs.txt create mode 100644 scripts/ae_render.py create mode 100644 scripts/gen_coverage.py create mode 100644 scripts/gen_reference.py diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..35406b3 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,67 @@ +name: Docs + +on: + push: + branches: [master] + paths: + - 'docs/**' + - 'scripts/**' + - 'mkdocs.yml' + - 'requirements-docs.txt' + - '.github/workflows/docs.yml' + pull_request: + paths: + - 'docs/**' + - 'scripts/**' + - 'mkdocs.yml' + - 'requirements-docs.txt' + - '.github/workflows/docs.yml' + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: '3.12' + cache: pip + cache-dependency-path: requirements-docs.txt + + - name: Install toolchain + run: pip install -r requirements-docs.txt + + # --strict turns broken internal links into failures. With ~200 generated + # pages that is the only realistic way to catch a bad cross-reference. + - name: Build + run: mkdocs build --strict + + - name: Upload Pages artifact + if: github.event_name != 'pull_request' + uses: actions/upload-pages-artifact@v3 + with: + path: site + + deploy: + # Pull requests build but do not publish. + if: github.event_name != 'pull_request' + needs: build + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/schema-check.yml b/.github/workflows/schema-check.yml new file mode 100644 index 0000000..f9ead7f --- /dev/null +++ b/.github/workflows/schema-check.yml @@ -0,0 +1,42 @@ +name: Schema freshness + +on: + push: + branches: [master] + paths: + - 'AbilityEditor/Src/AbilityEditor/Classes/**' + - 'docs/schema.json' + - '.scripts/generate-docs.ps1' + - '.github/workflows/schema-check.yml' + pull_request: + paths: + - 'AbilityEditor/Src/AbilityEditor/Classes/**' + - 'docs/schema.json' + - '.scripts/generate-docs.ps1' + - '.github/workflows/schema-check.yml' + workflow_dispatch: + +permissions: + contents: read + +jobs: + hash: + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + + - name: Compare source hash against the committed schema + shell: pwsh + run: | + $computed = & .\.scripts\generate-docs.ps1 -PrintSourceHash + $committed = (Get-Content .\docs\schema.json -Raw | ConvertFrom-Json).sourceHash + + Write-Host "computed : $computed" + Write-Host "committed : $committed" + + if ($computed -ne $committed) { + Write-Host "::error::docs/schema.json is stale. The UnrealScript sources changed but the schema was not regenerated. Run: .\.scripts\generate-docs.ps1 -SdkPath ''" + exit 1 + } + + Write-Host "Schema is current." diff --git a/.gitignore b/.gitignore index a1620b9..6320d19 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,7 @@ # Build output BuildCache/ obj/ + +# Documentation site +.venv/ +site/ diff --git a/.scripts/generate-docs.ps1 b/.scripts/generate-docs.ps1 index 1a8f44a..d5cd0bb 100644 --- a/.scripts/generate-docs.ps1 +++ b/.scripts/generate-docs.ps1 @@ -227,27 +227,27 @@ $Curated = @{ @{ Name = 'Costs'; ConfigKey = 'Costs'; Struct = 'CostEdit'; Root = 'X2AbilityCostEditor'; Registry = 'CostEditors'; HelperApply = 'ApplyCostEdit' Intro = 'Edits the `AbilityCosts` array of the template. Costs are edited **in place** when a cost of the given `Class` already exists; otherwise behaviour depends on the modes below. Fields you do not `Set` keep their current value.' } @{ Name = 'Cooldown'; ConfigKey = 'Cooldown'; Struct = 'CooldownEdit'; Root = 'X2AbilityCooldownEditor'; Registry = 'CooldownEditors'; HelperApply = 'ApplyCooldownEdit' - Intro = 'Edits the template''s `AbilityCooldown`. With `Class` **omitted**, the existing cooldown is edited **in place** (no-op if the ability has none). With `Class` set, the existing cooldown is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class''s default value.' } + Intro = 'Edits the template''s `AbilityCooldown`. With `Class` **omitted**, the existing cooldown is edited **in place** (no-op if the ability has none). With `Class` set, the existing cooldown is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance - any field you do not `Set` then takes the class''s default value.' } @{ Name = 'Charges'; ConfigKey = 'Charges'; Struct = 'ChargesEdit'; Root = 'X2AbilityChargesEditor'; Registry = 'ChargesEditors'; HelperApply = 'ApplyChargesEdit' - Intro = 'Edits the template''s `AbilityCharges`. With `Class` **omitted**, the existing charges object is edited **in place** (no-op if the ability has none). With `Class` set, the existing object is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class''s default value. `RemoveCharges=true` removes the charges object entirely.' } + Intro = 'Edits the template''s `AbilityCharges`. With `Class` **omitted**, the existing charges object is edited **in place** (no-op if the ability has none). With `Class` set, the existing object is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance - any field you do not `Set` then takes the class''s default value. `RemoveCharges=true` removes the charges object entirely.' } @{ Name = 'Effects'; ConfigKey = 'Effects'; Struct = 'EffectEdit'; Root = 'X2AbilityEffectsEditor'; Registry = 'EffectsEditors'; HelperApply = 'ApplyEffectEdit' Intro = 'Edits the effect arrays of the template. `Slot` selects which array is edited (see `EAbilityEffectSlot`). Within the selected array the effect of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`.' } @{ Name = 'Conditions'; ConfigKey = ''; Struct = 'ConditionEdit'; Root = 'X2AbilityConditionEditor'; Registry = 'ConditionEditors'; HelperApply = 'ApplyConditionEdits' Intro = 'Conditions can be edited in seven places: the template-level arrays (`ShooterConditions`, `TargetConditions`, `MultiTargetConditions` directly inside an `AbilityEdit`) and, inside an `Effects` entry, the effect''s own `TargetConditions` plus the class-specific `ApplyDamageModConditions`, `LethalDamageConditions` and `ToHitConditions`. All take an array of `ConditionEdit` entries. Within the targeted array, the condition of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`.' } @{ Name = 'ToHitCalc'; ConfigKey = 'ToHitCalc'; Struct = 'ToHitCalcEdit'; Root = 'X2AbilityToHitCalcEditor'; Registry = 'ToHitCalcEditors'; HelperApply = 'ApplyToHitCalcEdit' - Intro = 'Edits the template''s to-hit calculation. Two slots exist: `ToHitCalc` (`Template.AbilityToHitCalc`) and `ToHitOwnerOnMissCalc` (`Template.AbilityToHitOwnerOnMissCalc`), both taking a `ToHitCalcEdit` block. With `Class` **omitted**, the existing calc is edited **in place**; with `Class` set, the existing calc is edited in place when it is already exactly that class, otherwise it is **replaced** by a new instance (unset fields then take class defaults). Classes without a dedicated editor below (e.g. `X2AbilityToHitCalc_StandardMelee`, `X2AbilityToHitCalc_DeadEye`) are still valid `Class` values — they get the fields of their nearest listed ancestor.' } + Intro = 'Edits the template''s to-hit calculation. Two slots exist: `ToHitCalc` (`Template.AbilityToHitCalc`) and `ToHitOwnerOnMissCalc` (`Template.AbilityToHitOwnerOnMissCalc`), both taking a `ToHitCalcEdit` block. With `Class` **omitted**, the existing calc is edited **in place**; with `Class` set, the existing calc is edited in place when it is already exactly that class, otherwise it is **replaced** by a new instance (unset fields then take class defaults). Classes without a dedicated editor below (e.g. `X2AbilityToHitCalc_StandardMelee`, `X2AbilityToHitCalc_DeadEye`) are still valid `Class` values - they get the fields of their nearest listed ancestor.' } @{ Name = 'TargetStyle'; ConfigKey = 'TargetStyle'; Struct = 'TargetStyleEdit'; Root = 'X2AbilityTargetStyleEditor'; Registry = 'TargetStyleEditors'; HelperApply = 'ApplyTargetStyleEdit' Intro = 'Edits `Template.AbilityTargetStyle` (how the ability picks its primary target). Same in-place/replace semantics as `ToHitCalc`. Field-less styles (`X2AbilityTarget_Self`, `X2AbilityTarget_Path`, ...) are valid `Class` values for swapping the style.' } @{ Name = 'MultiTargetStyle'; ConfigKey = 'MultiTargetStyle'; Struct = 'MultiTargetStyleEdit'; Root = 'X2AbilityMultiTargetStyleEditor'; Registry = 'MultiTargetStyleEditors'; HelperApply = 'ApplyMultiTargetStyleEdit' Intro = 'Edits the template''s multi-target styles. Two slots exist: `MultiTargetStyle` (`Template.AbilityMultiTargetStyle`) and `PassiveAOEStyle` (`Template.AbilityPassiveAOEStyle`), both taking a `MultiTargetStyleEdit` block. Same in-place/replace semantics as `ToHitCalc`.' } @{ Name = 'Triggers'; ConfigKey = 'Triggers'; Struct = 'TriggerEdit'; Root = 'X2AbilityTriggerEditor'; Registry = 'TriggerEditors'; HelperApply = 'ApplyTriggerEdits' - Intro = 'Edits the `AbilityTriggers` array of the template. The trigger of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`. **Caveat:** adding a *new* `X2AbilityTrigger_EventListener` from config is rarely useful — its `ListenerData.EventFn` delegate can only be assigned in code and stays `none`. Editing an existing listener trigger preserves its `EventFn`. `X2AbilityTrigger_OnAbilityActivated` is handled by the EventListener editor (its `MatchAbilityActivated` field is protected and cannot be set). See also `AbilityEventListenerEdits` in the template fields for the separate `Template.AbilityEventListeners` array.' } + Intro = 'Edits the `AbilityTriggers` array of the template. The trigger of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`. **Caveat:** adding a *new* `X2AbilityTrigger_EventListener` from config is rarely useful - its `ListenerData.EventFn` delegate can only be assigned in code and stays `none`. Editing an existing listener trigger preserves its `EventFn`. `X2AbilityTrigger_OnAbilityActivated` is handled by the EventListener editor (its `MatchAbilityActivated` field is protected and cannot be set). See also `AbilityEventListenerEdits` in the template fields for the separate `Template.AbilityEventListeners` array.' } ) StructuralFieldNotes = @{ 'AbilityEdit.Ability' = 'Required. Template name of the ability to edit (e.g. `SwordSlice`).' 'CostEdit.Class' = 'Cost class to target/instantiate, e.g. `X2AbilityCost_ActionPoints`. Bare names are auto-prefixed with `XComGame.`; empty falls back to `X2AbilityCost`.' - 'CostEdit.Mode' = 'Per-entry edit mode (`EAbilityCostEditMode`), see [Edit modes](#edit-modes).' + 'CostEdit.Mode' = 'Per-entry edit mode (`EAbilityCostEditMode`). Defaults to the enum''s first value, which clears the existing list.' 'CooldownEdit.Class' = 'Optional. Omitted = edit the existing cooldown in place. Set = target/instantiate that class, e.g. `X2AbilityCooldown_PerPlayerType`. Bare names are auto-prefixed with `XComGame.`.' 'ChargesEdit.Class' = 'Optional. Omitted = edit the existing charges object in place. Set = target/instantiate that class, e.g. `X2AbilityCharges_GremlinHeal`. Bare names are auto-prefixed with `XComGame.`.' 'ChargesEdit.RemoveCharges' = 'Set to true to remove the ability''s charges object entirely. No `Class` needed; the other fields of the block are ignored.' @@ -259,7 +259,7 @@ $Curated = @{ 'MultiTargetStyleEdit.Class' = 'Optional. Omitted = edit the existing style in place. Set = target/instantiate that class, e.g. `X2AbilityMultiTarget_Radius`. Bare names are auto-prefixed with `XComGame.`.' 'MultiTargetStyleEdit.CustomProperties' = 'Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors.' 'TriggerEdit.Class' = 'Trigger class to target/instantiate, e.g. `X2AbilityTrigger_UnitPostBeginPlay`. Bare names are auto-prefixed with `XComGame.`.' - 'TriggerEdit.Mode' = 'Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes).' + 'TriggerEdit.Mode' = 'Per-entry edit mode (`EArrayEditMode`). Defaults to the enum''s first value, which clears the existing array.' 'TriggerEdit.CustomProperties' = 'Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors.' 'EffectEdit.EffectHitModifiers' = '**Replace-only**: when non-empty, replaces `X2Effect_ToHitModifier.Modifiers` entirely (`EffectHitModifier` entries, incl. `MatchToHit` class ref via qualified name).' 'EffectEdit.CustomProperties' = 'Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors.' @@ -267,9 +267,9 @@ $Curated = @{ 'AbilityEventListenerEdit.EventID' = 'Matches the existing `Template.AbilityEventListeners` entry to edit. Entries cannot be added (their `EventFn` delegate is code-only).' 'EffectEdit.Class' = 'Effect class to target/instantiate, e.g. `X2Effect_ApplyWeaponDamage`. Bare names are auto-prefixed with `XComGame.`; empty falls back to `X2Effect`.' 'EffectEdit.Slot' = 'Which effect array to edit (`EAbilityEffectSlot`): `eAES_Target`, `eAES_MultiTarget` or `eAES_Shooter`.' - 'EffectEdit.Mode' = 'Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes).' + 'EffectEdit.Mode' = 'Per-entry edit mode (`EArrayEditMode`). Defaults to the enum''s first value, which clears the existing array.' 'ConditionEdit.Class' = 'Condition class to target/instantiate, e.g. `X2Condition_UnitProperty`. Bare names are auto-prefixed with `XComGame.`.' - 'ConditionEdit.Mode' = 'Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes).' + 'ConditionEdit.Mode' = 'Per-entry edit mode (`EArrayEditMode`). Defaults to the enum''s first value, which clears the existing array.' 'AdditionalCooldownEdit.AbilityName' = 'Ability whose cooldown entry is added/updated in `AditionalAbilityCooldowns`.' 'AdditionalCooldownEdit.ApplyCooldownType' = '`AdditionalCooldown_ApplyLarger` or `AdditionalCooldown_ApplySmaller`. Applied when non-empty.' 'BonusChargeEdit.AbilityName' = 'Ability that grants the bonus charges.' @@ -1043,83 +1043,6 @@ $schemaJson = ($schema | ConvertTo-Json -Depth 14) + "`n" #region 6. Render the markdown blocks -function ConvertTo-CellText { - param([string] $Text) - - if ($null -eq $Text) { return '' } - return ($Text -replace '\|', '\|') -} - -function Format-FieldTable { - param([object[]] $Fields) - - $sb = [System.Text.StringBuilder]::new() - [void]$sb.Append("| Config key | Type | Requires | Game field | Notes |$nl") - [void]$sb.Append("|---|---|---|---|---|$nl") - - foreach ($f in $Fields) { - $requires = '' - switch ($f.kind) { - 'scalar' { $requires = '`' + $f.guard + '=true`' } - 'namearray' { - if ($f.Contains('replaceOnly') -and $f.replaceOnly) { $requires = 'non-empty *(replace-only)*' } - else { $requires = '`' + $f.modeField + '`' } - } - 'nested' { - if ($f.Contains('modeField') -and $f.modeField) { $requires = '`' + $f.modeField + '`' } - else { $requires = '—' } - } - } - - $gameField = '' - if ($f.gameField) { $gameField = '`' + $f.gameField + '`' } - - $notes = ConvertTo-CellText $f.description - if ($f.inheritedFrom) { - $inh = "*(shared — from ``$($f.inheritedFrom)``)*" - if ($notes) { $notes = "$notes $inh" } else { $notes = $inh } - } - if ($f.kind -eq 'nested') { - $nestedType = $f.type -replace 'array<|>', '' - if ($Curated.NestedLinks.ContainsKey($nestedType)) { - $link = "see $($Curated.NestedLinks[$nestedType])" - } - else { - $link = "see [``$nestedType``](#nested-structs)" - } - if ($notes) { $notes = "$notes — $link" } else { $notes = $link } - } - - [void]$sb.Append("| ``$($f.config)`` | ``$($f.type)`` | $requires | $gameField | $notes |$nl") - } - - return $sb.ToString() -} - -function Format-StructTable { - param([string] $StructName) - - $sb = [System.Text.StringBuilder]::new() - [void]$sb.Append("| Config key | Type | Requires | Notes |$nl") - [void]$sb.Append("|---|---|---|---|$nl") - - foreach ($f in $Structs[$StructName]) { - if ($f.Kind -eq 'guard' -or $f.Kind -eq 'mode') { continue } - - $requires = '—' - if ($f.Kind -eq 'optionalScalar') { $requires = '`' + $f.Guard + '=true`' } - if ($f.ModeField) { $requires = '`' + $f.ModeField + '`' } - - $desc = $f.Description - $key = "$StructName.$($f.Name)" - if ($Curated.StructuralFieldNotes.ContainsKey($key)) { $desc = $Curated.StructuralFieldNotes[$key] } - - [void]$sb.Append("| ``$($f.Name)`` | ``$($f.Type)`` | $requires | $(ConvertTo-CellText $desc) |$nl") - } - - return $sb.ToString() -} - # ---- summary block ---- $summary = [System.Text.StringBuilder]::new() [void]$summary.Append("An ``+AbilityEdits`` entry can change:$nl$nl") @@ -1142,121 +1065,6 @@ foreach ($fam in $FamilyModels) { } $summaryMd = $summary.ToString() -# ---- enums block ---- -$enumsBuilder = [System.Text.StringBuilder]::new() -foreach ($e in $schemaEnums) { - [void]$enumsBuilder.Append("#### ``$($e.name)``$nl$nl") - [void]$enumsBuilder.Append("| Value | Meaning |$nl|---|---|$nl") - foreach ($v in $e.values) { - $d = $v.description - if (-not $d) { $d = '—' } - [void]$enumsBuilder.Append("| ``$($v.name)`` | $(ConvertTo-CellText $d) |$nl") - } - [void]$enumsBuilder.Append($nl) -} -$enumsMd = $enumsBuilder.ToString() - -# ---- reference block ---- -$reference = [System.Text.StringBuilder]::new() - -[void]$reference.Append("### Template fields$nl$nl") -[void]$reference.Append("Applied directly to the ``X2AbilityTemplate``.$nl$nl") -[void]$reference.Append("| Config key | Requires | Game field |$nl|---|---|---|$nl") -[void]$reference.Append("| ``Ability`` | required | template lookup (``FindAbilityTemplate``) |$nl") -foreach ($t in $schemaTemplate) { - $requires = '' - if ($t.kind -eq 'scalar') { $requires = '`' + $t.guard + '=true`' } - if ($t.kind -eq 'namearray') { $requires = '`' + $t.modeField + '`' } - [void]$reference.Append("| ``$($t.config)`` | $requires | ``$($t.gameField)`` |$nl") -} -[void]$reference.Append("| ``AbilityEventListenerEdits`` | ``EventID`` match | ``AbilityEventListeners`` — edit-existing-only, see [``AbilityEventListenerEdit``](#nested-structs) |$nl") - -if ($TemplateNotEditable.Count -gt 0) { - [void]$reference.Append($nl) - [void]$reference.Append("
Template fields not editable via config ($($TemplateNotEditable.Count))$nl$nl") - [void]$reference.Append((($TemplateNotEditable | ForEach-Object { '`' + $_.name + '` *(' + $_.reason + ')*' }) -join ', ') + $nl) - [void]$reference.Append($nl + "
$nl") -} -[void]$reference.Append($nl) - -foreach ($fam in $FamilyModels) { - if ($fam.configKey) { - [void]$reference.Append("### $($fam.name) (``$($fam.configKey)``)$nl$nl") - } - else { - [void]$reference.Append("### $($fam.name)$nl$nl") - } - if (-not $fam.wired) { - [void]$reference.Append("> ⚠️ **Not yet functional.** This section documents the upcoming release; these entries are currently ignored by the mod.$nl$nl") - } - [void]$reference.Append("$($fam.intro)$nl$nl") - - # structural (plain / mode-less) fields of the family struct that are not covered by editor tables - [void]$reference.Append("Structural fields:$nl$nl") - $sb = [System.Text.StringBuilder]::new() - [void]$sb.Append("| Config key | Type | Notes |$nl|---|---|---|$nl") - foreach ($f in $Structs[$fam.editStruct]) { - if ($f.Kind -ne 'plain' -and $f.Name -ne 'CustomProperties') { continue } - $desc = $f.Description - $key = "$($fam.editStruct).$($f.Name)" - if ($Curated.StructuralFieldNotes.ContainsKey($key)) { $desc = $Curated.StructuralFieldNotes[$key] } - [void]$sb.Append("| ``$($f.Name)`` | ``$($f.Type)`` | $(ConvertTo-CellText $desc) |$nl") - } - [void]$reference.Append($sb.ToString()) - [void]$reference.Append($nl) - - $dispatch = @($fam.editors | ForEach-Object { if ($_.catchAll) { 'any other class' } else { '`' + $_.gameClass + '`' } }) - [void]$reference.Append("Editor dispatch order (first match wins): " + ($dispatch -join ' → ') + "$nl$nl") - - # Base fields are defined on the family root, so they are identical for every editor: render once. - $firstEditor = $fam.editors | Select-Object -First 1 - $familyShared = @() - if ($firstEditor) { - # inheritedFrom is redundant inside the family-wide shared table; suppress it there - $familyShared = @($firstEditor.fields | Where-Object { $_.origin -eq 'base' } | ForEach-Object { - $copy = [ordered]@{} - foreach ($k in $_.Keys) { $copy[$k] = $_[$k] } - $copy.inheritedFrom = $null - $copy - }) - } - if ($familyShared.Count -gt 0) { - [void]$reference.Append("Shared fields (available for **every** class of this family):$nl$nl") - [void]$reference.Append((Format-FieldTable $familyShared) + $nl) - } - - foreach ($ed in $fam.editors) { - if ($ed.catchAll) { - [void]$reference.Append("#### Any other class$nl$nl") - [void]$reference.Append("Handled by ``$($ed.class)``: only the shared fields above apply.$nl$nl") - continue - } - - [void]$reference.Append("#### ``$($ed.gameClass)``$nl$nl") - if ($ed.Contains('abstract') -and $ed.abstract) { - [void]$reference.Append("*Abstract class — existing instances (of its subclasses) can be edited in place, but it cannot be added as a new instance from config.*$nl$nl") - } - - $derived = @($ed.fields | Where-Object { $_.origin -eq 'derived' }) - if ($derived.Count -gt 0) { - [void]$reference.Append((Format-FieldTable $derived) + $nl) - } - else { - [void]$reference.Append("No class-specific fields; the shared fields above apply.$nl$nl") - } - - if ($ed.Contains('notEditable') -and $ed.notEditable.Count -gt 0) { - [void]$reference.Append("Not editable via config: " + (($ed.notEditable | ForEach-Object { '`' + $_.name + '` *(' + $_.reason + ')*' }) -join ', ') + "$nl$nl") - } - } -} - -[void]$reference.Append("### Nested structs$nl$nl") -foreach ($nested in @('AdditionalCooldownEdit', 'BonusChargeEdit', 'StatChangeEdit', 'WeaponDamageValueEdit', 'AbilityEventListenerEdit', 'AECustomProperty')) { - [void]$reference.Append("#### ``$nested``$nl$nl") - [void]$reference.Append((Format-StructTable $nested) + $nl) -} -$referenceMd = $reference.ToString() #endregion @@ -1264,10 +1072,11 @@ $referenceMd = $reference.ToString() if (-not (Test-Path $DocsDir)) { $null = New-Item -ItemType Directory -Path $DocsDir } +# Only the "supported at a glance" summary is injected into README.md. The full reference and the +# edit-mode tables are rendered from docs/schema.json by scripts/gen_reference.py at docs-build +# time, so producing them here as well would be a second source of truth for the same data. $GeneratedBlocks = [ordered]@{ - 'summary' = $summaryMd - 'enums' = $enumsMd - 'reference' = $referenceMd + 'summary' = $summaryMd } $stale = $false diff --git a/AbilityEditor/Config/2.0/XComAbilityEditor.ini b/AbilityEditor/Config/2.0/XComAbilityEditor.ini deleted file mode 100644 index 2ae0c65..0000000 --- a/AbilityEditor/Config/2.0/XComAbilityEditor.ini +++ /dev/null @@ -1,63 +0,0 @@ -[AbilityEditor.X2DLCInfo_AbilityEditor] -; Examples: - -; This will allow Ranger to have an action after Slash -+AbilityEdits=( \\ - Ability=SwordSlice, \\ - Costs=( \\ - ( \\ - Class="X2AbilityCost_ActionPoints", \\ - SetNumPoints=true, \\ - NumPoints=1, \\ - SetConsumeAllPoints=true, \\ - ConsumeAllPoints=true, \\ - DoNotConsumeAllSoldierAbilities=(Blademaster) \\ - ), \\ - ( \\ - Class=X2AbilityCost_Charges, \\ - SetNumCharges=true, \\ - NumCharges=2 \\ - ) \\ - ), \\ - Charges=( \\ - Class="X2AbilityCharges", \\ - SetInitialCharges=true, \\ - InitialCharges=5, \\ - BonusCharges=( \\ - ( \\ - AbilityName=Blademaster, \\ - SetNumCharges=true, \\ - NumCharges=3 \\ - ) \\ - ) \\ - ), \\ - Cooldown=( \\ - Class="X2AbilityCooldown", \\ - SetNumTurns=true, \\ - NumTurns=5, \\ - AdditionalCooldowns=( \\ - ( \\ - AbilityName=Blademaster, \\ - SetNumTurns=true, \\ - NumTurns=3 \\ - ) \\ - ) \\ - ) \\ -) - -; Gives 9 charges of Scanning Protocol, is a free action and can be used every two turns -;+Abilities = (AbilityName=ScanningProtocol, Cooldown=2, Charges=9, FreeAction=true) - -; Restoration grants 3 extra charges of Heals -;+Abilities = (AbilityName=GremlinHeal, Charges=2, BonusChargeWith[0]=(BonusAbilityName=RestorativeMist, NumBonusCharges=3) ) - -+AbilityEdits=( \\ - Ability=AidProtocol, \\ - Cooldown=( \\ - Class="XComGame.X2AbilityCooldown_PerPlayerType", \\ - SetNumTurns=true, \\ - NumTurns=9, \\ - SetNumTurnsForAI=true, \\ - NumTurnsForAI=1 \\ - ) \\ -) diff --git a/AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc b/AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc index b37a9b9..7b7e53d 100644 --- a/AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc +++ b/AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc @@ -1637,7 +1637,7 @@ struct EffectEdit // X2Effect_ToHitModifier var array ToHitConditions; - // X2Effect_ToHitModifier: replace-only — when non-empty, replaces Modifiers entirely + // X2Effect_ToHitModifier: replace-only - when non-empty, replaces Modifiers entirely var array EffectHitModifiers; var array CustomProperties; diff --git a/CHANGELOG.md b/CHANGELOG.md index e041b50..ebeac96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Changelog All notable changes to **Ability Editor** are documented here. The mod lets you retune -XCOM 2 (War of the Chosen) abilities entirely from `.ini` config — no scripting, no +XCOM 2 (War of the Chosen) abilities entirely from `.ini` config - no scripting, no rebuilds. See the [README](README.md) for the full field reference. This project follows [Keep a Changelog](https://keepachangelog.com/) and @@ -9,12 +9,18 @@ This project follows [Keep a Changelog](https://keepachangelog.com/) and ## [Unreleased] +### Added + +- **A documentation site** at [boundir.github.io/AbilityEditor](https://boundir.github.io/AbilityEditor/), + built with mkdocs-material and published by GitHub Actions. Game classes haves their own page + with a guessable URL (`/reference/effects/x2effect_achilles/`), so a link can point at one class instead of one page documentation. + ### Fixed - **Replace-only array fields no longer advertise a mode field that doesn't exist.** The reference tables listed `HitModifiersMode` and `EffectHitModifiersMode` in the "Requires" column for - `ToHitCalcEdit.HitModifiers` and `EffectEdit.EffectHitModifiers`. Neither field exists — both - arrays are replace-only — so anyone who wrote them was silently ignored. They now render as + `ToHitCalcEdit.HitModifiers` and `EffectEdit.EffectHitModifiers`. Neither field exists - both + arrays are replace-only - so anyone who wrote them was silently ignored. They now render as "non-empty *(replace-only)*". This affected 11 entries in `docs/schema.json` too, so any tooling consuming the schema inherited the same wrong information. @@ -31,7 +37,7 @@ This project follows [Keep a Changelog](https://keepachangelog.com/) and - Documented that building the mod requires Community Highlander-patched SDK sources ([Issue #68](https://github.com/X2CommunityCore/X2WOTCCommunityHighlander/issues/68) removes `protectedwrite` from the three `X2AbilityTemplate` effect arrays this mod writes). This is a - build-time requirement only — the compiled mod runs against vanilla `XComGame`. + build-time requirement only - the compiled mod runs against vanilla `XComGame`. - Corrected the field-documentation convention: a `//` comment must sit directly above the **value** var, not above the `Set`/value pair. A comment above the pair attaches to the guard and is dropped, which is why 219 existing comments act as section headers rather than field docs. @@ -47,7 +53,7 @@ A ground-up rewrite. The old options still work, but there's now a single, consi under `[AbilityEditor.X2DLCInfo_AbilityEditor]` in `XComAbilityEditor.ini`. One entry can change as much or as little of an ability as you like. -- **Costs** — action points, ammo, charges, focus, "consume item", and the special +- **Costs** - action points, ammo, charges, focus, "consume item", and the special reserve/heavy-weapon/quickdraw action-point costs. Add, remove, or tweak them per ability. ```ini ; Let Ranger's Slash keep the turn going (1 point, don't end turn) for Blademaster users @@ -60,15 +66,15 @@ A ground-up rewrite. The old options still work, but there's now a single, consi ) ``` -- **Cooldowns & charges** — set turn cooldowns (including separate XCOM/AI values and +- **Cooldowns & charges** - set turn cooldowns (including separate XCOM/AI values and shared cooldowns with other abilities), initial charges, and bonus charges granted by other abilities. -- **Effects** — change what an ability actually *does*: weapon damage, stat changes, +- **Effects** - change what an ability actually *does*: weapon damage, stat changes, stuns, armor, damage immunities, action-point grants, effect removal, covering fire, and dozens more. Every applicable in-game effect type is supported. -- **Conditions** — control *who and when* an ability can affect: unit type, health, +- **Conditions** - control *who and when* an ability can affect: unit type, health, cover, range, alert status, active effects, inventory, visibility, and more. Attach them to the ability or to an individual effect. ```ini @@ -82,15 +88,15 @@ A ground-up rewrite. The old options still work, but there's now a single, consi ) ``` -- **Aim & hit chance** — edit an ability's to-hit calculation: built-in aim/crit +- **Aim & hit chance** - edit an ability's to-hit calculation: built-in aim/crit modifiers, guaranteed hits, flat percent-to-hit, stat rolls, and more. -- **Targeting shape** — change how an ability picks targets: single-target rules, cursor +- **Targeting shape** - change how an ability picks targets: single-target rules, cursor range, moving-melee reach, and area shapes (radius, cone, line, cylinder, burst, all-units). -- **Triggers** — change what makes an ability fire (e.g. passive on spawn, event-driven). +- **Triggers** - change what makes an ability fire (e.g. passive on spawn, event-driven). -- **Ability template settings** — hostility, concealment rules, cross-class eligibility, +- **Ability template settings** - hostility, concealment rules, cross-class eligibility, passive/unique flags, HUD icon and color, tooltip/summary visibility, point cost, default item slot, friendly-fire warnings, added/prerequisite/override abilities, and more. diff --git a/README.md b/README.md index e4c6de3..99ab5cd 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ # Ability Editor -An XCOM 2: War of the Chosen mod that lets you change how existing abilities work **purely from config** — no UnrealScript required. Costs, cooldowns, charges, effects, conditions and template fields of any ability (base game, DLC or other mods) can be edited by adding `+AbilityEdits` entries to an `.ini` file. +An XCOM 2: War of the Chosen mod that changes how existing abilities work **purely from config** - no UnrealScript required. Costs, cooldowns, charges, effects, conditions and template fields of any ability (base game, DLC or another mod's) can be edited by adding `+AbilityEdits` entries to an `.ini` file. -For example, letting a Ranger keep acting after using Slash is just: +Letting a Ranger keep acting after Slash is just: ```ini [AbilityEditor.X2DLCInfo_AbilityEditor] +AbilityEdits=( \\ Ability=SwordSlice, \\ + CostMode=eACEM_Merge, \\ Costs=( \\ ( \\ Class="X2AbilityCost_ActionPoints", \\ + Mode=eACEM_Merge, \\ SetNumPoints=true, \\ NumPoints=1, \\ SetConsumeAllPoints=true, \\ @@ -20,27 +22,21 @@ For example, letting a Ranger keep acting after using Slash is just: ) ``` -> This documents the **2.0 config API**. The legacy 1.0 API (`[AbilityEditor.OPTC_Abilities]`, see `AbilityEditor/ReadMe.txt`) still works but is superseded by this one. +## 📖 Documentation + +**[boundir.github.io/AbilityEditor](https://boundir.github.io/AbilityEditor/)** - full field reference for every class across all nine families, plus guides. -## How it works +Start with [Config syntax](https://boundir.github.io/AbilityEditor/getting-started/config-syntax/) and [Edit modes](https://boundir.github.io/AbilityEditor/getting-started/edit-modes/); the second one covers defaults that can wipe an ability's costs if you leave them out. -At game start (`OnPostTemplatesCreated`), the mod reads every `+AbilityEdits=(...)` entry from the `[AbilityEditor.X2DLCInfo_AbilityEditor]` section of `XComAbilityEditor.ini`, finds the ability template named by `Ability`, and applies your edits to it. +## Install -Things to know about the syntax: +Subscribe on the [Steam Workshop](https://steamcommunity.com/sharedfiles/filedetails/?id=1789085465), or drop the mod folder into `XCom2-WarOfTheChosen/Mods/` and enable it in the launcher. No dependencies. -- **Line continuation**: end each line of a multi-line entry with ` \\` (a space and two backslashes), as in the examples. -- **`Set` + value pairs**: most fields come as a pair — a `SetX=true` switch and the `X=value` itself. A value without its `Set` switch is **ignored**. This is how the mod tells "you asked for 0" apart from "you didn't ask". - ```ini - SetNumTurns=true, NumTurns=5 ; applied - NumTurns=5 ; ignored! - ``` -- **Arrays** (`AdditionalAbilities`, `DamageTypes`, ...) instead come with a companion `...Mode` field that says how your list combines with the existing one — see [Edit modes](#edit-modes). -- **`Class=` resolution**: class names without a package prefix are assumed to come from the base game (`X2AbilityCost_ActionPoints` becomes `XComGame.X2AbilityCost_ActionPoints`). To target a class from another mod, qualify it: `Class="MyModPackage.X2AbilityCost_Custom"`. -- **Dispatch**: for each `Class` the mod picks the most specific editor it has for it (see the dispatch order lists in the [Reference](#reference)). Classes without a dedicated editor still get the family's *shared* fields. -- **Edit in place vs replace**: everything edits existing objects **in place** when possible. For the single-object slots (`Cooldown`, `Charges`, `ToHitCalc`, `ToHitOwnerOnMissCalc`, `TargetStyle`, `MultiTargetStyle`): omit `Class` to edit whatever is there, or set `Class` — if the existing object is already exactly that class it is edited in place, otherwise it is **replaced** by a fresh instance (fields you don't `Set` then fall back to that class's defaults). -- **Conditions** can be edited in seven places: `ShooterConditions`, `TargetConditions` and `MultiTargetConditions` at the top level of an `AbilityEdit` (the template's condition arrays), plus `TargetConditions`, `ApplyDamageModConditions`, `LethalDamageConditions` and `ToHitConditions` inside an `Effects` entry. +Put your edits under `[AbilityEditor.X2DLCInfo_AbilityEditor]` in an `XComAbilityEditor.ini` - either the mod's own, or (better, so a Workshop update can't overwrite them) your own small mod. The `+` prefix appends, so several mods can contribute edits at once. -## Supported at a glance +> **Config changes need a cache clear.** Delete `Documents\My Games\XCOM2 War of the Chosen\XComGame\Config` after editing any `.ini`. Skipping this is the most common reason a correct edit appears to do nothing. + +## What you can edit An `+AbilityEdits` entry can change: @@ -57,4950 +53,35 @@ An `+AbilityEdits` entry can change: - **Triggers** (`Triggers`) — `X2AbilityTrigger_UnitPostBeginPlay`, `X2AbilityTrigger_EventListener`, `X2AbilityTrigger_Event` — plus shared fields on any other subclass -## Edit modes - -Array-type fields and multi-entry blocks take a mode that controls how your config combines with what the ability already has. The exact semantics per enum value: - - -#### `EStatChangeMode` - -| Value | Meaning | -|---|---| -| `eSCM_Replace` | Clear existing stat changes (`m_aStatChanges`) before applying yours. (Default) | -| `eSCM_Merge` | Update the entry for each `StatType` if present, otherwise add it. | - -#### `EAbilityEffectSlot` - -| Value | Meaning | -|---|---| -| `eAES_Target` | Edit `AbilityTargetEffects` (effects applied to the primary target). (Default) | -| `eAES_MultiTarget` | Edit `AbilityMultiTargetEffects`. | -| `eAES_Shooter` | Edit `AbilityShooterEffects` (effects applied to the shooter). | - -#### `EChargesBonusMode` - -| Value | Meaning | -|---|---| -| `eCBM_Replace` | Clear existing `BonusCharges` entries before applying yours. (Default) | -| `eCBM_Merge` | Update the entry for each `AbilityName` if present, otherwise add it. | - -#### `EAdditionalCooldownEditMode` - -| Value | Meaning | -|---|---| -| `eACEM_Replace` | Clear existing `AditionalAbilityCooldowns` entries before applying yours. (Default) | -| `eACEM_Merge` | Update the entry for each `AbilityName` if present, otherwise add it. | - -#### `EAbilityCostEditMode` - -| Value | Meaning | -|---|---| -| `eACEM_ReplaceAll` | As `CostMode`: clear **all** existing costs before applying the entries. As per-entry `Mode`: edit in place if a cost of that class exists, otherwise skip (unless `CostMode=eACEM_ReplaceAll`, in which case a new cost is added). (Default) | -| `eACEM_Merge` | Edit the existing cost of that class in place; if none exists, instantiate and add it. | -| `eACEM_AddOnly` | Same as `eACEM_Merge`: edit in place if present, otherwise add. | -| `eACEM_Remove` | Remove the cost of that class from the ability. | - -#### `EArrayEditMode` - -| Value | Meaning | -|---|---| -| `eAEM_ReplaceAll` | Clear the whole target array, then add this effect/condition. (Default) | -| `eAEM_Merge` | Edit the existing effect/condition of that class in place; if none exists, instantiate and add it. | -| `eAEM_AddOnly` | Same as `eAEM_Merge`: edit in place if present, otherwise add. | -| `eAEM_Remove` | Remove the first effect/condition of that class from the target array. | - -#### `ENameArrayEditMode` - -| Value | Meaning | -|---|---| -| `eNAEM_Replace` | Replace the whole target array with the provided values. (Default) | -| `eNAEM_Merge` | Append each provided value that is not already present. | -| `eNAEM_AddOnly` | Set the provided values **only if the target array is currently empty**; otherwise do nothing. It does not append. | -| `eNAEM_Remove` | Remove each provided value from the target array. | - - -> **Watch out:** the *default* mode is always the first enum value. For `Costs` that means `eACEM_ReplaceAll` — listing any `Costs` without setting `CostMode` **wipes all existing costs** and keeps only what you list. And `AddOnly` for name arrays does **not** append; it only sets the values when the target array is empty. - -## Reference - - -### Template fields - -Applied directly to the `X2AbilityTemplate`. - -| Config key | Requires | Game field | -|---|---|---| -| `Ability` | required | template lookup (`FindAbilityTemplate`) | -| `Hostility` | `SetHostility=true` | `Hostility` | -| `ConcealmentRule` | `SetConcealmentRule=true` | `ConcealmentRule` | -| `CrossClassEligible` | `SetCrossClassEligible=true` | `bCrossClassEligible` | -| `IsPassive` | `SetIsPassive=true` | `bIsPassive` | -| `UniqueSource` | `SetUniqueSource=true` | `bUniqueSource` | -| `AllowedByDefault` | `SetAllowedByDefault=true` | `bAllowedByDefault` | -| `TriggerChance` | `SetTriggerChance=true` | `TriggerChance` | -| `SuperConcealmentLoss` | `SetSuperConcealmentLoss=true` | `SuperConcealmentLoss` | -| `ChosenActivationIncreasePerUse` | `SetChosenActivationIncreasePerUse=true` | `ChosenActivationIncreasePerUse` | -| `LostSpawnIncreasePerUse` | `SetLostSpawnIncreasePerUse=true` | `LostSpawnIncreasePerUse` | -| `AbilityPointCost` | `SetAbilityPointCost=true` | `AbilityPointCost` | -| `DefaultSourceItemSlot` | `SetDefaultSourceItemSlot=true` | `DefaultSourceItemSlot` | -| `UseThrownGrenadeEffects` | `SetUseThrownGrenadeEffects=true` | `bUseThrownGrenadeEffects` | -| `UseLaunchedGrenadeEffects` | `SetUseLaunchedGrenadeEffects=true` | `bUseLaunchedGrenadeEffects` | -| `AllowFreeFireWeaponUpgrade` | `SetAllowFreeFireWeaponUpgrade=true` | `bAllowFreeFireWeaponUpgrade` | -| `AllowAmmoEffects` | `SetAllowAmmoEffects=true` | `bAllowAmmoEffects` | -| `AllowBonusWeaponEffects` | `SetAllowBonusWeaponEffects=true` | `bAllowBonusWeaponEffects` | -| `SilentAbility` | `SetSilentAbility=true` | `bSilentAbility` | -| `CannotTeleport` | `SetCannotTeleport=true` | `bCannotTeleport` | -| `PreventsTargetTeleport` | `SetPreventsTargetTeleport=true` | `bPreventsTargetTeleport` | -| `FinalizeAbilityName` | `SetFinalizeAbilityName=true` | `FinalizeAbilityName` | -| `CancelAbilityName` | `SetCancelAbilityName=true` | `CancelAbilityName` | -| `TwoTurnAttackAbility` | `SetTwoTurnAttackAbility=true` | `TwoTurnAttackAbility` | -| `IconImage` | `SetIconImage=true` | `IconImage` | -| `AbilityIconColor` | `SetAbilityIconColor=true` | `AbilityIconColor` | -| `AbilityIconBehaviorHUD` | `SetAbilityIconBehaviorHUD=true` | `eAbilityIconBehaviorHUD` | -| `ShotHUDPriority` | `SetShotHUDPriority=true` | `ShotHUDPriority` | -| `DisplayInUITooltip` | `SetDisplayInUITooltip=true` | `bDisplayInUITooltip` | -| `DisplayInUITacticalText` | `SetDisplayInUITacticalText=true` | `bDisplayInUITacticalText` | -| `DontDisplayInAbilitySummary` | `SetDontDisplayInAbilitySummary=true` | `bDontDisplayInAbilitySummary` | -| `DisplayTargetHitChance` | `SetDisplayTargetHitChance=true` | `DisplayTargetHitChance` | -| `HideOnClassUnlock` | `SetHideOnClassUnlock=true` | `bHideOnClassUnlock` | -| `AbilitySourceName` | `SetAbilitySourceName=true` | `AbilitySourceName` | -| `LimitTargetIcons` | `SetLimitTargetIcons=true` | `bLimitTargetIcons` | -| `BypassAbilityConfirm` | `SetBypassAbilityConfirm=true` | `bBypassAbilityConfirm` | -| `UseAmmoAsChargesForHUD` | `SetUseAmmoAsChargesForHUD=true` | `bUseAmmoAsChargesForHUD` | -| `AmmoAsChargesDivisor` | `SetAmmoAsChargesDivisor=true` | `iAmmoAsChargesDivisor` | -| `FriendlyFireWarning` | `SetFriendlyFireWarning=true` | `bFriendlyFireWarning` | -| `FriendlyFireWarningRobotsOnly` | `SetFriendlyFireWarningRobotsOnly=true` | `bFriendlyFireWarningRobotsOnly` | -| `CommanderAbility` | `SetCommanderAbility=true` | `bCommanderAbility` | -| `AdditionalAbilities` | `AdditionalAbilitiesMode` | `AdditionalAbilities` | -| `PrerequisiteAbilities` | `PrerequisiteAbilitiesMode` | `PrerequisiteAbilities` | -| `OverrideAbilities` | `OverrideAbilitiesMode` | `OverrideAbilities` | -| `AssociatedPassives` | `AssociatedPassivesMode` | `AssociatedPassives` | -| `PostActivationEvents` | `PostActivationEventsMode` | `PostActivationEvents` | -| `HideIfAvailable` | `HideIfAvailableMode` | `HideIfAvailable` | -| `AbilityEventListenerEdits` | `EventID` match | `AbilityEventListeners` — edit-existing-only, see [`AbilityEventListenerEdit`](#nested-structs) | - -
Template fields not editable via config (84) - -`Requirements` *(type `StrategyRequirement`)*, `bRecordValidTiles` *(not covered (deliberate core-set choice))*, `bTickPerActionEffects` *(not covered (deliberate core-set choice))*, `bCheckCollision` *(not covered (deliberate core-set choice))*, `bAffectNeighboringTiles` *(not covered (deliberate core-set choice))*, `bFragileDamageOnly` *(not covered (deliberate core-set choice))*, `AbilityRevealEvent` *(not covered (deliberate core-set choice))*, `ChosenReinforcementGroupName` *(not covered (deliberate core-set choice))*, `ChosenTraitType` *(not covered (deliberate core-set choice))*, `ChosenExcludeTraits` *(not covered (deliberate core-set choice))*, `ChosenTraitForceLevelGate` *(not covered (deliberate core-set choice))*, `HideErrors` *(not covered (deliberate core-set choice))*, `bNoConfirmationWithHotKey` *(not covered (deliberate core-set choice))*, `AbilityConfirmSound` *(not covered (deliberate core-set choice))*, `DefaultKeyBinding` *(not covered (deliberate core-set choice))*, `UIStatMarkups` *(array of `UIAbilityStatMarkup`)*, `CustomFireAnim` *(not covered (deliberate core-set choice))*, `CustomFireKillAnim` *(not covered (deliberate core-set choice))*, `CustomMovingFireAnim` *(not covered (deliberate core-set choice))*, `CustomMovingFireKillAnim` *(not covered (deliberate core-set choice))*, `CustomMovingTurnLeftFireAnim` *(not covered (deliberate core-set choice))*, `CustomMovingTurnLeftFireKillAnim` *(not covered (deliberate core-set choice))*, `CustomMovingTurnRightFireAnim` *(not covered (deliberate core-set choice))*, `CustomMovingTurnRightFireKillAnim` *(not covered (deliberate core-set choice))*, `CustomSelfFireAnim` *(not covered (deliberate core-set choice))*, `AssociatedPlayTiming` *(type `SequencePlayTiming`)*, `bShowActivation` *(not covered (deliberate core-set choice))*, `bShowPostActivation` *(not covered (deliberate core-set choice))*, `bSkipFireAction` *(not covered (deliberate core-set choice))*, `bSkipExitCoverWhenFiring` *(not covered (deliberate core-set choice))*, `bSkipPerkActivationActions` *(not covered (deliberate core-set choice))*, `bSkipPerkActivationActionsSync` *(not covered (deliberate core-set choice))*, `bSkipMoveStop` *(not covered (deliberate core-set choice))*, `bOverrideMeleeDeath` *(not covered (deliberate core-set choice))*, `bOverrideVisualResult` *(not covered (deliberate core-set choice))*, `OverrideVisualResult` *(not covered (deliberate core-set choice))*, `bHideWeaponDuringFire` *(not covered (deliberate core-set choice))*, `bHideAmmoWeaponDuringFire` *(not covered (deliberate core-set choice))*, `bIsASuppressionEffect` *(not covered (deliberate core-set choice))*, `bOverrideAim` *(not covered (deliberate core-set choice))*, `bUseSourceLocationZToAim` *(not covered (deliberate core-set choice))*, `bOverrideWeapon` *(not covered (deliberate core-set choice))*, `bStationaryWeapon` *(not covered (deliberate core-set choice))*, `ActionFireClass` *(class reference)*, `bForceProjectileTouchEvents` *(not covered (deliberate core-set choice))*, `ActivationSpeech` *(not covered (deliberate core-set choice))*, `SourceHitSpeech` *(not covered (deliberate core-set choice))*, `TargetHitSpeech` *(not covered (deliberate core-set choice))*, `SourceMissSpeech` *(not covered (deliberate core-set choice))*, `TargetMissSpeech` *(not covered (deliberate core-set choice))*, `TargetKilledByAlienSpeech` *(not covered (deliberate core-set choice))*, `TargetKilledByXComSpeech` *(not covered (deliberate core-set choice))*, `MultiTargetsKilledByAlienSpeech` *(not covered (deliberate core-set choice))*, `MultiTargetsKilledByXComSpeech` *(not covered (deliberate core-set choice))*, `TargetWingedSpeech` *(not covered (deliberate core-set choice))*, `TargetArmorHitSpeech` *(not covered (deliberate core-set choice))*, `TargetMissedSpeech` *(not covered (deliberate core-set choice))*, `AbilityPassiveAOEStyle` *(type `X2AbilityPassiveAOEStyle`)*, `bAllowUnderhandAnim` *(not covered (deliberate core-set choice))*, `TargetingMethod` *(class reference)*, `SecondaryTargetingMethod` *(class reference)*, `SkipRenderOfAOETargetingTiles` *(not covered (deliberate core-set choice))*, `SkipRenderOfTargetingTemplate` *(not covered (deliberate core-set choice))*, `MeleePuckMeshPath` *(not covered (deliberate core-set choice))*, `CinescriptCameraType` *(not covered (deliberate core-set choice))*, `CameraPriority` *(not covered (deliberate core-set choice))*, `bUsesFiringCamera` *(not covered (deliberate core-set choice))*, `FrameAbilityCameraType` *(not covered (deliberate core-set choice))*, `bFrameEvenWhenUnitIsHidden` *(not covered (deliberate core-set choice))*, `BuildNewGameStateFn` *(delegate — code-only)*, `BuildInterruptGameStateFn` *(delegate — code-only)*, `BuildVisualizationFn` *(delegate — code-only)*, `BuildAppliedVisualizationSyncFn` *(delegate — code-only)*, `BuildAffectedVisualizationSyncFn` *(delegate — code-only)*, `SoldierAbilityPurchasedFn` *(delegate — code-only)*, `OnVisualizationTrackInsertedFn` *(delegate — code-only)*, `ModifyNewContextFn` *(delegate — code-only)*, `DamagePreviewFn` *(delegate — code-only)*, `GetBonusWeaponAmmoFn` *(delegate — code-only)*, `MergeVisualizationFn` *(delegate — code-only)*, `AlternateFriendlyNameFn` *(delegate — code-only)*, `ShouldRevealChosenTraitFn` *(delegate — code-only)*, `OverrideAbilityAvailabilityFn` *(delegate — code-only)*, `MP_PerkOverride` *(not covered (deliberate core-set choice))* - -
- -### Costs (`Costs`) - -Edits the `AbilityCosts` array of the template. Costs are edited **in place** when a cost of the given `Class` already exists; otherwise behaviour depends on the modes below. Fields you do not `Set` keep their current value. - -Structural fields: - -| Config key | Type | Notes | -|---|---|---| -| `Class` | `string` | Cost class to target/instantiate, e.g. `X2AbilityCost_ActionPoints`. Bare names are auto-prefixed with `XComGame.`; empty falls back to `X2AbilityCost`. | -| `Mode` | `EAbilityCostEditMode` | Per-entry edit mode (`EAbilityCostEditMode`), see [Edit modes](#edit-modes). | - -Editor dispatch order (first match wins): `X2AbilityCost_Ammo` → `X2AbilityCost_Charges` → `X2AbilityCost_ConsumeItem` → `X2AbilityCost_Focus` → `X2AbilityCost_ReserveActionPoints` → `X2AbilityCost_HeavyWeaponActionPoints` → `X2AbilityCost_QuickdrawActionPoints` → `X2AbilityCost_ActionPoints` → any other class - -Shared fields (available for **every** class of this family): - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `FreeCost` | `bool` | `SetFreeCost=true` | `bFreeCost` | | - -#### `X2AbilityCost_Ammo` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumAmmo` | `int` | `SetNumAmmo=true` | `iAmmo` | | -| `UseLoadedAmmo` | `bool` | `SetUseLoadedAmmo=true` | `UseLoadedAmmo` | | -| `ReturnChargesError` | `bool` | `SetReturnChargesError=true` | `bReturnChargesError` | | -| `ConsumeAllAmmo` | `bool` | `SetConsumeAllAmmo=true` | `bConsumeAllAmmo` | | - -#### `X2AbilityCost_Charges` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumCharges` | `int` | `SetNumCharges=true` | `NumCharges` | | -| `OnlyOnHit` | `bool` | `SetOnlyOnHit=true` | `bOnlyOnHit` | | -| `AlsoExpendChargesOnSharedBondmateAbility` | `bool` | `SetAlsoExpendChargesOnSharedBondmateAbility=true` | `bAlsoExpendChargesOnSharedBondmateAbility` | | -| `SharedAbilityCharges` | `array` | `SharedAbilityChargesMode` | `SharedAbilityCharges` | | - -#### `X2AbilityCost_ConsumeItem` - -No class-specific fields; the shared fields above apply. - -#### `X2AbilityCost_Focus` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `FocusAmount` | `int` | `SetFocusAmount=true` | `FocusAmount` | | -| `ConsumeAllFocus` | `bool` | `SetConsumeAllFocus=true` | `ConsumeAllFocus` | | -| `GhostOnlyCost` | `bool` | `SetGhostOnlyCost=true` | `GhostOnlyCost` | | - -#### `X2AbilityCost_ReserveActionPoints` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumPoints` | `int` | `SetNumPoints=true` | `iNumPoints` | | -| `ConsumeAllPoints` | `bool` | `SetConsumeAllPoints=true` | `bConsumeAllPoints` | | -| `AllowedTypes` | `array` | `AllowedTypesMode` | `AllowedTypes` | | - -#### `X2AbilityCost_HeavyWeaponActionPoints` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumPoints` | `int` | `SetNumPoints=true` | `iNumPoints` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `ConsumeAllPoints` | `bool` | `SetConsumeAllPoints=true` | `bConsumeAllPoints` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `AddWeaponTypicalCost` | `bool` | `SetAddWeaponTypicalCost=true` | `bAddWeaponTypicalCost` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `MoveCost` | `bool` | `SetMoveCost=true` | `bMoveCost` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `AllowedTypes` | `array` | `AllowedTypesMode` | `AllowedTypes` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `DoNotConsumeAllEffects` | `array` | `DoNotConsumeAllEffectsMode` | `DoNotConsumeAllEffects` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `DoNotConsumeAllSoldierAbilities` | `array` | `DoNotConsumeAllSoldierAbilitiesMode` | `DoNotConsumeAllSoldierAbilities` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | - -#### `X2AbilityCost_QuickdrawActionPoints` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumPoints` | `int` | `SetNumPoints=true` | `iNumPoints` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `ConsumeAllPoints` | `bool` | `SetConsumeAllPoints=true` | `bConsumeAllPoints` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `AddWeaponTypicalCost` | `bool` | `SetAddWeaponTypicalCost=true` | `bAddWeaponTypicalCost` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `MoveCost` | `bool` | `SetMoveCost=true` | `bMoveCost` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `AllowedTypes` | `array` | `AllowedTypesMode` | `AllowedTypes` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `DoNotConsumeAllEffects` | `array` | `DoNotConsumeAllEffectsMode` | `DoNotConsumeAllEffects` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | -| `DoNotConsumeAllSoldierAbilities` | `array` | `DoNotConsumeAllSoldierAbilitiesMode` | `DoNotConsumeAllSoldierAbilities` | *(shared — from `X2AbilityCostEditor_ActionPoints`)* | - -#### `X2AbilityCost_ActionPoints` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumPoints` | `int` | `SetNumPoints=true` | `iNumPoints` | | -| `ConsumeAllPoints` | `bool` | `SetConsumeAllPoints=true` | `bConsumeAllPoints` | | -| `AddWeaponTypicalCost` | `bool` | `SetAddWeaponTypicalCost=true` | `bAddWeaponTypicalCost` | | -| `MoveCost` | `bool` | `SetMoveCost=true` | `bMoveCost` | | -| `AllowedTypes` | `array` | `AllowedTypesMode` | `AllowedTypes` | | -| `DoNotConsumeAllEffects` | `array` | `DoNotConsumeAllEffectsMode` | `DoNotConsumeAllEffects` | | -| `DoNotConsumeAllSoldierAbilities` | `array` | `DoNotConsumeAllSoldierAbilitiesMode` | `DoNotConsumeAllSoldierAbilities` | | - -#### Any other class - -Handled by `X2AbilityCostEditor_Base`: only the shared fields above apply. - -### Cooldown (`Cooldown`) - -Edits the template's `AbilityCooldown`. With `Class` **omitted**, the existing cooldown is edited **in place** (no-op if the ability has none). With `Class` set, the existing cooldown is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class's default value. - -Structural fields: - -| Config key | Type | Notes | -|---|---|---| -| `Class` | `string` | Optional. Omitted = edit the existing cooldown in place. Set = target/instantiate that class, e.g. `X2AbilityCooldown_PerPlayerType`. Bare names are auto-prefixed with `XComGame.`. | - -Editor dispatch order (first match wins): `X2AbilityCooldown_AidProtocol` → `X2AbilityCooldown_PerPlayerType` → `X2AbilityCooldown_LocalAndGlobal` → `X2AbilityCooldown_Global` → `X2AbilityCooldown_Rend` → any other class - -Shared fields (available for **every** class of this family): - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | | -| `IgnoreOnHit` | `bool` | `SetIgnoreOnHit=true` | `bDoNotApplyOnHit` | | -| `AdditionalCooldowns` | `array` | `AdditionalCooldownMode` | `AditionalAbilityCooldowns` | see [`AdditionalCooldownEdit`](#nested-structs) | - -#### `X2AbilityCooldown_AidProtocol` - -No class-specific fields; the shared fields above apply. - -#### `X2AbilityCooldown_PerPlayerType` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumTurnsForAI` | `int` | `SetNumTurnsForAI=true` | `iNumTurnsForAI` | | -| `NumGlobalTurns` | `int` | `SetNumGlobalTurns=true` | `NumGlobalTurns` | *(shared — from `X2AbilityCooldownEditor_LocalAndGlobal`)* | - -#### `X2AbilityCooldown_LocalAndGlobal` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumGlobalTurns` | `int` | `SetNumGlobalTurns=true` | `NumGlobalTurns` | | - -#### `X2AbilityCooldown_Global` - -No class-specific fields; the shared fields above apply. - -#### `X2AbilityCooldown_Rend` - -No class-specific fields; the shared fields above apply. - -#### Any other class - -Handled by `X2AbilityCooldownEditor_Base`: only the shared fields above apply. - -### Charges (`Charges`) - -Edits the template's `AbilityCharges`. With `Class` **omitted**, the existing charges object is edited **in place** (no-op if the ability has none). With `Class` set, the existing object is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class's default value. `RemoveCharges=true` removes the charges object entirely. - -Structural fields: - -| Config key | Type | Notes | -|---|---|---| -| `Class` | `string` | Optional. Omitted = edit the existing charges object in place. Set = target/instantiate that class, e.g. `X2AbilityCharges_GremlinHeal`. Bare names are auto-prefixed with `XComGame.`. | -| `RemoveCharges` | `bool` | Set to true to remove the ability's charges object entirely. No `Class` needed; the other fields of the block are ignored. | - -Editor dispatch order (first match wins): `X2AbilityCharges_CocoonSpawnChryssalid` → `X2AbilityCharges_GremlinHeal` → `X2AbilityCharges_RevivalProtocol` → `X2AbilityCharges_ScanningProtocol` → `X2AbilityCharges_StasisLance` → any other class - -Shared fields (available for **every** class of this family): - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `InitialCharges` | `int` | `SetInitialCharges=true` | `InitialCharges` | | -| `BonusCharges` | `array` | `BonusChargesMode` | `BonusCharges` | see [`BonusChargeEdit`](#nested-structs) | - -#### `X2AbilityCharges_CocoonSpawnChryssalid` - -No class-specific fields; the shared fields above apply. - -#### `X2AbilityCharges_GremlinHeal` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `Stabilize` | `bool` | `SetStabilize=true` | `bStabilize` | | - -#### `X2AbilityCharges_RevivalProtocol` - -No class-specific fields; the shared fields above apply. - -#### `X2AbilityCharges_ScanningProtocol` - -No class-specific fields; the shared fields above apply. - -#### `X2AbilityCharges_StasisLance` - -No class-specific fields; the shared fields above apply. - -#### Any other class - -Handled by `X2AbilityChargesEditor_Base`: only the shared fields above apply. - -### Effects (`Effects`) - -Edits the effect arrays of the template. `Slot` selects which array is edited (see `EAbilityEffectSlot`). Within the selected array the effect of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`. - -Structural fields: - -| Config key | Type | Notes | -|---|---|---| -| `Class` | `string` | Effect class to target/instantiate, e.g. `X2Effect_ApplyWeaponDamage`. Bare names are auto-prefixed with `XComGame.`; empty falls back to `X2Effect`. | -| `Slot` | `EAbilityEffectSlot` | Which effect array to edit (`EAbilityEffectSlot`): `eAES_Target`, `eAES_MultiTarget` or `eAES_Shooter`. | -| `Mode` | `EArrayEditMode` | Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes). | -| `CustomProperties` | `array` | Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors. | - -Editor dispatch order (first match wins): `X2Effect_Obsessed` → `X2Effect_Shattered` → `X2Effect_VanishingWind` → `X2Effect_KineticPlating` → `X2Effect_Vanish` → `X2Effect_BlastPadding` → `X2Effect_KillUnit` → `X2Effect_ParthenogenicPoison` → `X2Effect_PersistentStatChange` → `X2Effect_PersistentStatChangeRestoreDefault` → `X2Effect_SpawnPsiZombie` → `X2Effect_SpawnShadowbindUnit` → `X2Effect_ThreatAssessment` → `X2Effect_WallBreaking` → `X2Effect_Achilles` → `X2Effect_AdverseSoldierClasses` → `X2Effect_Amplify` → `X2Effect_ApplyBlazingPinionsTargetToWorld` → `X2Effect_ApplyFireToWorld` → `X2Effect_APRounds` → `X2Effect_Aura` → `X2Effect_Bewildered` → `X2Effect_BloodTrail` → `X2Effect_BonusArmor` → `X2Effect_BonusWeaponDamage` → `X2Effect_ConditionalDamageModifier` → `X2Effect_CoveringFire` → `X2Effect_DamageImmunity` → `X2Effect_DelayedAbilityActivation` → `X2Effect_FaceMultiRoundTarget` → `X2Effect_GenerateCover` → `X2Effect_Groundling` → `X2Effect_Guardian` → `X2Effect_HoloTarget` → `X2Effect_HolyWarriorDeath` → `X2Effect_HomingMine` → `X2Effect_HuntersInstinctDamage` → `X2Effect_ImmediateAbilityActivation` → `X2Effect_Impatient` → `X2Effect_Implacable` → `X2Effect_LaserSight` → `X2Effect_MeleeDamageAdjust` → `X2Effect_MindControl` → `X2Effect_ModifyReactionFire` → `X2Effect_ModifyStats` → `X2Effect_Nearsighted` → `X2Effect_Needle` → `X2Effect_Oblivious` → `X2Effect_OverrideDeathAnimOnLoad` → `X2Effect_PaleHorse` → `X2Effect_PersistentSquadViewer` → `X2Effect_PersistentTraversalChange` → `X2Effect_PersistentVoidConduit` → `X2Effect_Possessed` → `X2Effect_Reaper` → `X2Effect_Regeneration` → `X2Effect_RemoveEffectsByDamageType` → `X2Effect_ReserveOverwatchPoints` → `X2Effect_RunBehaviorTree` → `X2Effect_ScanningProtocol` → `X2Effect_SmokeGrenade` → `X2Effect_SpawnDestructible` → `X2Effect_SpawnUnit` → `X2Effect_Stasis` → `X2Effect_Stunned` → `X2Effect_SuperConcealModifier` → `X2Effect_Sustain` → `X2Effect_Sustained` → `X2Effect_TalonRounds` → `X2Effect_TargetDamageDistanceBonus` → `X2Effect_TargetDamageTypeBonus` → `X2Effect_ToHitModifier` → `X2Effect_TrackingShotMarkTarget` → `X2Effect_TurnStartActionPoints` → `X2Effect_VolatileMix` → `X2Effect_ApplyDirectionalWorldDamage` → `X2Effect_ApplyMedikitHeal` → `X2Effect_ApplyWeaponDamage` → `X2Effect_Brutal` → `X2Effect_EnableGlobalAbility` → `X2Effect_GetOverHere` → `X2Effect_GrantActionPoints` → `X2Effect_IncreaseBondmateCohesion` → `X2Effect_Knockback` → `X2Effect_LifeSteal` → `X2Effect_MarkValidActivationTiles` → `X2Effect_ModifyInitiativeOrder` → `X2Effect_ModifyTemplarFocus` → `X2Effect_LethalWeaponDamage` → `X2Effect_Persistent` → `X2Effect_ReduceCooldowns` → `X2Effect_RemoteStart` → `X2Effect_RemoveEffects` → `X2Effect_ReserveActionPoints` → `X2Effect_SetUnitValue` → `X2Effect_SoulSteal` → `X2Effect_Spotted` → `X2Effect_SuspendMissionTimer` → `X2Effect_TriggerEvent` → `X2Effect_VoidConduit` → `X2Effect_World` → any other class - -Shared fields (available for **every** class of this family): - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ApplyOnHit` | `bool` | `SetApplyOnHit=true` | `bApplyOnHit` | | -| `ApplyOnMiss` | `bool` | `SetApplyOnMiss=true` | `bApplyOnMiss` | | -| `ApplyChance` | `int` | `SetApplyChance=true` | `ApplyChance` | | -| `ApplyToWorldOnHit` | `bool` | `SetApplyToWorldOnHit=true` | `bApplyToWorldOnHit` | | -| `ApplyToWorldOnMiss` | `bool` | `SetApplyToWorldOnMiss=true` | `bApplyToWorldOnMiss` | | -| `UseSourcePlayerState` | `bool` | `SetUseSourcePlayerState=true` | `bUseSourcePlayerState` | | -| `IsImpairing` | `bool` | `SetIsImpairing=true` | `bIsImpairing` | | -| `IsImpairingMomentarily` | `bool` | `SetIsImpairingMomentarily=true` | `bIsImpairingMomentarily` | | -| `BringRemoveVisualizationForward` | `bool` | `SetBringRemoveVisualizationForward=true` | `bBringRemoveVisualizationForward` | | -| `ShowImmunity` | `bool` | `SetShowImmunity=true` | `bShowImmunity` | | -| `ShowImmunityAnyFailure` | `bool` | `SetShowImmunityAnyFailure=true` | `bShowImmunityAnyFailure` | | -| `AppliesDamage` | `bool` | `SetAppliesDamage=true` | `bAppliesDamage` | | -| `CanBeRedirected` | `bool` | `SetCanBeRedirected=true` | `bCanBeRedirected` | | -| `HideDeathWorldMessage` | `bool` | `SetHideDeathWorldMessage=true` | `bHideDeathWorldMessage` | | -| `MinStatContestResult` | `int` | `SetMinStatContestResult=true` | `MinStatContestResult` | | -| `MaxStatContestResult` | `int` | `SetMaxStatContestResult=true` | `MaxStatContestResult` | | -| `DelayVisualizationSec` | `float` | `SetDelayVisualizationSec=true` | `DelayVisualizationSec` | | -| `OverrideMissMessage` | `string` | `SetOverrideMissMessage=true` | `OverrideMissMessage` | | -| `DamageTypes` | `array` | `DamageTypesMode` | `DamageTypes` | | -| `TargetConditions` | `array` | — | `TargetConditions` | Conditions attached to the effect (X2Effect.TargetConditions) — see [Conditions](#conditions) | - -#### `X2Effect_Obsessed` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ObsessedTargetValueName` | `Name` | `SetObsessedTargetValueName=true` | `ObsessedTargetValueName` | | -| `CHLForceReapplyOnRefresh` | `bool` | `SetCHLForceReapplyOnRefresh=true` | `bForceReapplyOnRefresh` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* | -| `StatChange` | `array` | `StatChangeMode` | `m_aStatChanges` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* — see [`StatChangeEdit`](#nested-structs) | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Shattered` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ShatteredTargetValueName` | `Name` | `SetShatteredTargetValueName=true` | `ShatteredTargetValueName` | | -| `CHLForceReapplyOnRefresh` | `bool` | `SetCHLForceReapplyOnRefresh=true` | `bForceReapplyOnRefresh` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* | -| `StatChange` | `array` | `StatChangeMode` | `m_aStatChanges` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* — see [`StatChangeEdit`](#nested-structs) | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_VanishingWind` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `MovingVanishRevealAdditiveAnimName` | `name` | `SetMovingVanishRevealAdditiveAnimName=true` | `MovingVanishRevealAdditiveAnimName` | | -| `ReasonNotVisible` | `name` | `SetReasonNotVisible=true` | `ReasonNotVisible` | *(shared — from `X2AbilityEffectsEditor_Vanish`)* | -| `VanishRevealAdditiveAnimName` | `name` | `SetVanishRevealAdditiveAnimName=true` | `VanishRevealAdditiveAnimName` | *(shared — from `X2AbilityEffectsEditor_Vanish`)* | -| `VanishRevealAnimName` | `name` | `SetVanishRevealAnimName=true` | `VanishRevealAnimName` | *(shared — from `X2AbilityEffectsEditor_Vanish`)* | -| `VanishSyncAnimName` | `name` | `SetVanishSyncAnimName=true` | `VanishSyncAnimName` | *(shared — from `X2AbilityEffectsEditor_Vanish`)* | -| `CHLForceReapplyOnRefresh` | `bool` | `SetCHLForceReapplyOnRefresh=true` | `bForceReapplyOnRefresh` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* | -| `StatChange` | `array` | `StatChangeMode` | `m_aStatChanges` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* — see [`StatChangeEdit`](#nested-structs) | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_KineticPlating` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ShieldPerMiss` | `int` | `SetShieldPerMiss=true` | `ShieldPerMiss` | | -| `CHLForceReapplyOnRefresh` | `bool` | `SetCHLForceReapplyOnRefresh=true` | `bForceReapplyOnRefresh` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* | -| `StatChange` | `array` | `StatChangeMode` | `m_aStatChanges` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* — see [`StatChangeEdit`](#nested-structs) | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Vanish` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ReasonNotVisible` | `name` | `SetReasonNotVisible=true` | `ReasonNotVisible` | | -| `VanishRevealAdditiveAnimName` | `name` | `SetVanishRevealAdditiveAnimName=true` | `VanishRevealAdditiveAnimName` | | -| `VanishRevealAnimName` | `name` | `SetVanishRevealAnimName=true` | `VanishRevealAnimName` | | -| `VanishSyncAnimName` | `name` | `SetVanishSyncAnimName=true` | `VanishSyncAnimName` | | -| `CHLForceReapplyOnRefresh` | `bool` | `SetCHLForceReapplyOnRefresh=true` | `bForceReapplyOnRefresh` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* | -| `StatChange` | `array` | `StatChangeMode` | `m_aStatChanges` | *(shared — from `X2AbilityEffectsEditor_PersistentStatChange`)* — see [`StatChangeEdit`](#nested-structs) | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_BlastPadding` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ExplosiveDamageReduction` | `float` | `SetExplosiveDamageReduction=true` | `ExplosiveDamageReduction` | | -| `ArmorMitigationAmount` | `int` | `SetArmorMitigationAmount=true` | `ArmorMitigationAmount` | *(shared — from `X2AbilityEffectsEditor_BonusArmor`)* | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_KillUnit` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ParthenogenicPoison` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ParthenogenicPoisonType` | `name` | `SetParthenogenicPoisonType=true` | `ParthenogenicPoisonType` | | -| `ParthenogenicPoisonCocoonSpawnedName` | `name` | `SetParthenogenicPoisonCocoonSpawnedName=true` | `ParthenogenicPoisonCocoonSpawnedName` | | -| `AltUnitToSpawnName` | `name` | `SetAltUnitToSpawnName=true` | `AltUnitToSpawnName` | | -| `UnitToSpawnName` | `name` | `SetUnitToSpawnName=true` | `UnitToSpawnName` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `ClearTileBlockedByTargetUnitFlag` | `bool` | `SetClearTileBlockedByTargetUnitFlag=true` | `bClearTileBlockedByTargetUnitFlag` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopyTargetAppearance` | `bool` | `SetCopyTargetAppearance=true` | `bCopyTargetAppearance` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopySourceAppearance` | `bool` | `SetCopySourceAppearance=true` | `bCopySourceAppearance` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `KnockbackAffectsSpawnLocation` | `bool` | `SetKnockbackAffectsSpawnLocation=true` | `bKnockbackAffectsSpawnLocation` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `AddToSourceGroup` | `bool` | `SetAddToSourceGroup=true` | `bAddToSourceGroup` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopyReanimatedFromUnit` | `bool` | `SetCopyReanimatedFromUnit=true` | `bCopyReanimatedFromUnit` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopyReanimatedStatsFromUnit` | `bool` | `SetCopyReanimatedStatsFromUnit=true` | `bCopyReanimatedStatsFromUnit` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `SetProcessedScamperAs` | `bool` | `SetSetProcessedScamperAs=true` | `bSetProcessedScamperAs` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_PersistentStatChange` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `CHLForceReapplyOnRefresh` | `bool` | `SetCHLForceReapplyOnRefresh=true` | `bForceReapplyOnRefresh` | | -| `StatChange` | `array` | `StatChangeMode` | `m_aStatChanges` | see [`StatChangeEdit`](#nested-structs) | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_PersistentStatChangeRestoreDefault` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `StatTypesToRestore` | `array` | `StatTypesToRestoreMode` | `StatTypesToRestore` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_SpawnPsiZombie` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AnimationName` | `name` | `SetAnimationName=true` | `AnimationName` | | -| `AltUnitToSpawnName` | `name` | `SetAltUnitToSpawnName=true` | `AltUnitToSpawnName` | | -| `StartAnimationMinDelaySec` | `float` | `SetStartAnimationMinDelaySec=true` | `StartAnimationMinDelaySec` | | -| `StartAnimationMaxDelaySec` | `float` | `SetStartAnimationMaxDelaySec=true` | `StartAnimationMaxDelaySec` | | -| `UnitToSpawnName` | `name` | `SetUnitToSpawnName=true` | `UnitToSpawnName` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `ClearTileBlockedByTargetUnitFlag` | `bool` | `SetClearTileBlockedByTargetUnitFlag=true` | `bClearTileBlockedByTargetUnitFlag` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopyTargetAppearance` | `bool` | `SetCopyTargetAppearance=true` | `bCopyTargetAppearance` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopySourceAppearance` | `bool` | `SetCopySourceAppearance=true` | `bCopySourceAppearance` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `KnockbackAffectsSpawnLocation` | `bool` | `SetKnockbackAffectsSpawnLocation=true` | `bKnockbackAffectsSpawnLocation` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `AddToSourceGroup` | `bool` | `SetAddToSourceGroup=true` | `bAddToSourceGroup` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopyReanimatedFromUnit` | `bool` | `SetCopyReanimatedFromUnit=true` | `bCopyReanimatedFromUnit` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopyReanimatedStatsFromUnit` | `bool` | `SetCopyReanimatedStatsFromUnit=true` | `bCopyReanimatedStatsFromUnit` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `SetProcessedScamperAs` | `bool` | `SetSetProcessedScamperAs=true` | `bSetProcessedScamperAs` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_SpawnShadowbindUnit` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ShadowbindUnconciousCheckName` | `name` | `SetShadowbindUnconciousCheckName=true` | `ShadowbindUnconciousCheckName` | | -| `UnitToSpawnName` | `name` | `SetUnitToSpawnName=true` | `UnitToSpawnName` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `ClearTileBlockedByTargetUnitFlag` | `bool` | `SetClearTileBlockedByTargetUnitFlag=true` | `bClearTileBlockedByTargetUnitFlag` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopyTargetAppearance` | `bool` | `SetCopyTargetAppearance=true` | `bCopyTargetAppearance` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopySourceAppearance` | `bool` | `SetCopySourceAppearance=true` | `bCopySourceAppearance` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `KnockbackAffectsSpawnLocation` | `bool` | `SetKnockbackAffectsSpawnLocation=true` | `bKnockbackAffectsSpawnLocation` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `AddToSourceGroup` | `bool` | `SetAddToSourceGroup=true` | `bAddToSourceGroup` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopyReanimatedFromUnit` | `bool` | `SetCopyReanimatedFromUnit=true` | `bCopyReanimatedFromUnit` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `CopyReanimatedStatsFromUnit` | `bool` | `SetCopyReanimatedStatsFromUnit=true` | `bCopyReanimatedStatsFromUnit` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `SetProcessedScamperAs` | `bool` | `SetSetProcessedScamperAs=true` | `bSetProcessedScamperAs` | *(shared — from `X2AbilityEffectsEditor_SpawnUnit`)* | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ThreatAssessment` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ImmediateActionPoint` | `name` | `SetImmediateActionPoint=true` | `ImmediateActionPoint` | | -| `AbilityToActivate` | `name` | `SetAbilityToActivate=true` | `AbilityToActivate` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `GrantActionPoint` | `name` | `SetGrantActionPoint=true` | `GrantActionPoint` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `MaxPointsPerTurn` | `int` | `SetMaxPointsPerTurn=true` | `MaxPointsPerTurn` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `DirectAttackOnly` | `bool` | `SetDirectAttackOnly=true` | `bDirectAttackOnly` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `PreEmptiveFire` | `bool` | `SetPreEmptiveFire=true` | `bPreEmptiveFire` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `OnlyDuringEnemyTurn` | `bool` | `SetOnlyDuringEnemyTurn=true` | `bOnlyDuringEnemyTurn` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `UseMultiTargets` | `bool` | `SetUseMultiTargets=true` | `bUseMultiTargets` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `OnlyWhenAttackMisses` | `bool` | `SetOnlyWhenAttackMisses=true` | `bOnlyWhenAttackMisses` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `SelfTargeting` | `bool` | `SetSelfTargeting=true` | `bSelfTargeting` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `ActivationPercentChance` | `int` | `SetActivationPercentChance=true` | `ActivationPercentChance` | *(shared — from `X2AbilityEffectsEditor_CoveringFire`)* | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_WallBreaking` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `WallBreakingEffectName` | `name` | `SetWallBreakingEffectName=true` | `WallBreakingEffectName` | | -| `TraversalChanges` | `array` | `TraversalChangesMode` | `aTraversalChanges` | *(shared — from `X2AbilityEffectsEditor_PersistentTraversalChange`)* | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Achilles` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ToHitMin` | `int` | `SetToHitMin=true` | `ToHitMin` | | -| `DmgMod` | `float` | `SetDmgMod=true` | `DmgMod` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_AdverseSoldierClasses` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AdverseClasses` | `array` | `AdverseClassesMode` | `AdverseClasses` | | -| `DmgMod` | `float` | `SetDmgMod=true` | `DmgMod` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Amplify` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BonusDamageMult` | `float` | `SetBonusDamageMult=true` | `BonusDamageMult` | | -| `MinBonusDamage` | `int` | `SetMinBonusDamage=true` | `MinBonusDamage` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ApplyBlazingPinionsTargetToWorld` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `OverrideParticleSystemFill_Name` | `string` | `SetOverrideParticleSystemFill_Name=true` | `OverrideParticleSystemFill_Name` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ApplyFireToWorld` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `FireChance_Level1` | `float` | `SetFireChance_Level1=true` | `FireChance_Level1` | | -| `FireChance_Level2` | `float` | `SetFireChance_Level2=true` | `FireChance_Level2` | | -| `FireChance_Level3` | `float` | `SetFireChance_Level3=true` | `FireChance_Level3` | | -| `UseFireChanceLevel` | `bool` | `SetUseFireChanceLevel=true` | `bUseFireChanceLevel` | | -| `DamageFragileOnly` | `bool` | `SetDamageFragileOnly=true` | `bDamageFragileOnly` | | -| `CheckForLOSFromTargetLocation` | `bool` | `SetCheckForLOSFromTargetLocation=true` | `bCheckForLOSFromTargetLocation` | | -| `CenterTile` | `bool` | `SetCenterTile=true` | `bCenterTile` | *(shared — from `X2AbilityEffectsEditor_World`)* | - -#### `X2Effect_APRounds` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `Pierce` | `int` | `SetPierce=true` | `Pierce` | | -| `CritChance` | `int` | `SetCritChance=true` | `CritChance` | | -| `CritDamage` | `int` | `SetCritDamage=true` | `CritDamage` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Aura` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `EventsToUpdate` | `array` | `EventsToUpdateMode` | `EventsToUpdate` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Bewildered` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `DmgMod` | `float` | `SetDmgMod=true` | `DmgMod` | | -| `NumHitsForMod` | `int` | `SetNumHitsForMod=true` | `NumHitsForMod` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_BloodTrail` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BonusDamage` | `int` | `SetBonusDamage=true` | `BonusDamage` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_BonusArmor` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ArmorMitigationAmount` | `int` | `SetArmorMitigationAmount=true` | `ArmorMitigationAmount` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_BonusWeaponDamage` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BonusDmg` | `int` | `SetBonusDmg=true` | `BonusDmg` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ConditionalDamageModifier` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ModifyOutgoingDamage` | `bool` | `SetModifyOutgoingDamage=true` | `bModifyOutgoingDamage` | | -| `ModifyIncomingDamage` | `bool` | `SetModifyIncomingDamage=true` | `bModifyIncomingDamage` | | -| `DamageModifier` | `float` | `SetDamageModifier=true` | `DamageModifier` | | -| `DamageBonus` | `int` | `SetDamageBonus=true` | `DamageBonus` | | -| `ApplyDamageModConditions` | `array` | — | | X2Effect_ConditionalDamageModifier — see [Conditions](#conditions) | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -Not editable via config: `ApplyDamageModConditions` *(array of `X2Condition`)* - -#### `X2Effect_CoveringFire` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AbilityToActivate` | `name` | `SetAbilityToActivate=true` | `AbilityToActivate` | | -| `GrantActionPoint` | `name` | `SetGrantActionPoint=true` | `GrantActionPoint` | | -| `MaxPointsPerTurn` | `int` | `SetMaxPointsPerTurn=true` | `MaxPointsPerTurn` | | -| `DirectAttackOnly` | `bool` | `SetDirectAttackOnly=true` | `bDirectAttackOnly` | | -| `PreEmptiveFire` | `bool` | `SetPreEmptiveFire=true` | `bPreEmptiveFire` | | -| `OnlyDuringEnemyTurn` | `bool` | `SetOnlyDuringEnemyTurn=true` | `bOnlyDuringEnemyTurn` | | -| `UseMultiTargets` | `bool` | `SetUseMultiTargets=true` | `bUseMultiTargets` | | -| `OnlyWhenAttackMisses` | `bool` | `SetOnlyWhenAttackMisses=true` | `bOnlyWhenAttackMisses` | | -| `SelfTargeting` | `bool` | `SetSelfTargeting=true` | `bSelfTargeting` | | -| `ActivationPercentChance` | `int` | `SetActivationPercentChance=true` | `ActivationPercentChance` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_DamageImmunity` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ImmuneTypesAreInclusive` | `bool` | `SetImmuneTypesAreInclusive=true` | `ImmueTypesAreInclusive` | | -| `RemoveAfterAttackCount` | `int` | `SetRemoveAfterAttackCount=true` | `RemoveAfterAttackCount` | | -| `ImmuneTypes` | `array` | `ImmuneTypesMode` | `ImmuneTypes` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_DelayedAbilityActivation` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `TriggerEventName` | `name` | `SetTriggerEventName=true` | `TriggerEventName` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_FaceMultiRoundTarget` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `TriggerEventName` | `name` | `SetTriggerEventName=true` | `TriggerEventName` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_GenerateCover` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `CoverType` | `ECoverForceFlag` | `SetCoverType=true` | `CoverType` | | -| `RemoveWhenMoved` | `bool` | `SetRemoveWhenMoved=true` | `bRemoveWhenMoved` | | -| `RemoveOnOtherActivation` | `bool` | `SetRemoveOnOtherActivation=true` | `bRemoveOnOtherActivation` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Groundling` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `HeightBonus` | `int` | `SetHeightBonus=true` | `HeightBonus` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Guardian` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AllowedAbilities` | `array` | `AllowedAbilitiesMode` | `AllowedAbilities` | | -| `ProcChance` | `int` | `SetProcChance=true` | `ProcChance` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_HoloTarget` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `HitMod` | `int` | `SetHitMod=true` | `HitMod` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_HolyWarriorDeath` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `DelayTimeS` | `float` | `SetDelayTimeS=true` | `DelayTimeS` | | -| `ExplosiveDamage` | `bool` | `SetExplosiveDamage=true` | `bExplosiveDamage` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `IgnoreBaseDamage` | `bool` | `SetIgnoreBaseDamage=true` | `bIgnoreBaseDamage` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `DamageTag` | `name` | `SetDamageTag=true` | `DamageTag` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `AlwaysKillsCivilians` | `bool` | `SetAlwaysKillsCivilians=true` | `bAlwaysKillsCivilians` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `ApplyWorldEffectsForEachTargetLocation` | `bool` | `SetApplyWorldEffectsForEachTargetLocation=true` | `bApplyWorldEffectsForEachTargetLocation` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `AllowFreeKill` | `bool` | `SetAllowFreeKill=true` | `bAllowFreeKill` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `AllowWeaponUpgrade` | `bool` | `SetAllowWeaponUpgrade=true` | `bAllowWeaponUpgrade` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `BypassShields` | `bool` | `SetBypassShields=true` | `bBypassShields` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `IgnoreArmor` | `bool` | `SetIgnoreArmor=true` | `bIgnoreArmor` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `BypassSustainEffects` | `bool` | `SetBypassSustainEffects=true` | `bBypassSustainEffects` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `EnvironmentalDamageAmount` | `int` | `SetEnvironmentalDamageAmount=true` | `EnvironmentalDamageAmount` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* | -| `WeaponDamageValue` | `WeaponDamageValueEdit` | — | `EffectDamageValue` | *(shared — from `X2AbilityEffectsEditor_ApplyWeaponDamage`)* — see [`WeaponDamageValueEdit`](#nested-structs) | - -#### `X2Effect_HomingMine` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AbilityToTrigger` | `name` | `SetAbilityToTrigger=true` | `AbilityToTrigger` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_HuntersInstinctDamage` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BonusDamage` | `int` | `SetBonusDamage=true` | `BonusDamage` | | -| `BonusCritChance` | `int` | `SetBonusCritChance=true` | `BonusCritChance` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ImmediateAbilityActivation` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AbilityName` | `name` | `SetAbilityName=true` | `AbilityName` | | -| `ActivateAbilityOnTarget` | `bool` | `SetActivateAbilityOnTarget=true` | `ActivateAbilityOnTarget` | | -| `EffectTargetOnly` | `bool` | `SetEffectTargetOnly=true` | `EffectTargetOnly` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Impatient` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `DmgMod` | `float` | `SetDmgMod=true` | `DmgMod` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Implacable` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ImplacableThisTurnValue` | `name` | `SetImplacableThisTurnValue=true` | `ImplacableThisTurnValue` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_LaserSight` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BenefitFromEmpoweredUpgrades` | `bool` | `SetBenefitFromEmpoweredUpgrades=true` | `bBenefitFromEmpoweredUpgrades` | | -| `CritBonus` | `int` | `SetCritBonus=true` | `CritBonus` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_MeleeDamageAdjust` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `DamageMod` | `int` | `SetDamageMod=true` | `DamageMod` | | -| `MeleeDamageTypeName` | `name` | `SetMeleeDamageTypeName=true` | `MeleeDamageTypeName` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_MindControl` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumTurnsForAI` | `int` | `SetNumTurnsForAI=true` | `iNumTurnsForAI` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ModifyReactionFire` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AllowCrit` | `bool` | `SetAllowCrit=true` | `bAllowCrit` | | -| `ReactionModifier` | `int` | `SetReactionModifier=true` | `ReactionModifier` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ModifyStats` - -*Abstract class — existing instances (of its subclasses) can be edited in place, but it cannot be added as a new instance from config.* - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Nearsighted` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `DmgMod` | `float` | `SetDmgMod=true` | `DmgMod` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Needle` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ArmorPierce` | `int` | `SetArmorPierce=true` | `ArmorPierce` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Oblivious` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `DmgMod` | `float` | `SetDmgMod=true` | `DmgMod` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_OverrideDeathAnimOnLoad` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `OverrideAnimNameOnLoad` | `name` | `SetOverrideAnimNameOnLoad=true` | `OverrideAnimNameOnLoad` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_PaleHorse` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `CritBoostPerKill` | `int` | `SetCritBoostPerKill=true` | `CritBoostPerKill` | | -| `MaxCritBoost` | `int` | `SetMaxCritBoost=true` | `MaxCritBoost` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_PersistentSquadViewer` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `UseWeaponRadius` | `bool` | `SetUseWeaponRadius=true` | `bUseWeaponRadius` | | -| `ViewRadius` | `float` | `SetViewRadius=true` | `ViewRadius` | | -| `UseSourceLocation` | `bool` | `SetUseSourceLocation=true` | `bUseSourceLocation` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_PersistentTraversalChange` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `TraversalChanges` | `array` | `TraversalChangesMode` | `aTraversalChanges` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_PersistentVoidConduit` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `InitialDamage` | `int` | `SetInitialDamage=true` | `InitialDamage` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Possessed` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `WeaponTemplateName` | `name` | `SetWeaponTemplateName=true` | `WeaponTemplateName` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Reaper` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ReaperActivatedName` | `name` | `SetReaperActivatedName=true` | `ReaperActivatedName` | | -| `ReaperKillName` | `name` | `SetReaperKillName=true` | `ReaperKillName` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Regeneration` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `HealAmount` | `int` | `SetHealAmount=true` | `HealAmount` | | -| `MaxHealAmount` | `int` | `SetMaxHealAmount=true` | `MaxHealAmount` | | -| `HealthRegeneratedName` | `name` | `SetHealthRegeneratedName=true` | `HealthRegeneratedName` | | -| `EventToTriggerOnHeal` | `name` | `SetEventToTriggerOnHeal=true` | `EventToTriggerOnHeal` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_RemoveEffectsByDamageType` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `DamageTypesToRemove` | `array` | `DamageTypesToRemoveMode` | `DamageTypesToRemove` | | -| `Cleanse` | `bool` | `SetCleanse=true` | `bCleanse` | *(shared — from `X2AbilityEffectsEditor_RemoveEffects`)* | -| `CheckSource` | `bool` | `SetCheckSource=true` | `bCheckSource` | *(shared — from `X2AbilityEffectsEditor_RemoveEffects`)* | -| `DoNotVisualize` | `bool` | `SetDoNotVisualize=true` | `bDoNotVisualize` | *(shared — from `X2AbilityEffectsEditor_RemoveEffects`)* | -| `EffectNamesToRemove` | `array` | `EffectNamesToRemoveMode` | `EffectNamesToRemove` | *(shared — from `X2AbilityEffectsEditor_RemoveEffects`)* | - -#### `X2Effect_ReserveOverwatchPoints` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `UseAllPointsWithAbilities` | `array` | `UseAllPointsWithAbilitiesMode` | `UseAllPointsWithAbilities` | | -| `ReserveType` | `name` | `SetReserveType=true` | `ReserveType` | *(shared — from `X2AbilityEffectsEditor_ReserveActionPoints`)* | -| `NumPoints` | `int` | `SetNumPoints=true` | `NumPoints` | *(shared — from `X2AbilityEffectsEditor_ReserveActionPoints`)* | - -#### `X2Effect_RunBehaviorTree` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumActions` | `int` | `SetNumActions=true` | `NumActions` | | -| `BehaviorTreeName` | `name` | `SetBehaviorTreeName=true` | `BehaviorTreeName` | | -| `InitFromPlayer` | `bool` | `SetInitFromPlayer=true` | `bInitFromPlayer` | | -| `SetActionPointCount` | `int` | `SetSetActionPointCount=true` | `SetActionPointCount` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ScanningProtocol` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `LookAtDuration` | `float` | `SetLookAtDuration=true` | `LookAtDuration` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_SmokeGrenade` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `HitMod` | `int` | `SetHitMod=true` | `HitMod` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_SpawnDestructible` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `DestructibleArchetype` | `string` | `SetDestructibleArchetype=true` | `DestructibleArchetype` | | -| `DestroyOnRemoval` | `bool` | `SetDestroyOnRemoval=true` | `bDestroyOnRemoval` | | -| `TargetableBySpawnedTeamOnly` | `bool` | `SetTargetableBySpawnedTeamOnly=true` | `bTargetableBySpawnedTeamOnly` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -Not editable via config: `TargetingIcon` *(type `Texture2D`)* - -#### `X2Effect_SpawnUnit` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `UnitToSpawnName` | `name` | `SetUnitToSpawnName=true` | `UnitToSpawnName` | | -| `ClearTileBlockedByTargetUnitFlag` | `bool` | `SetClearTileBlockedByTargetUnitFlag=true` | `bClearTileBlockedByTargetUnitFlag` | | -| `CopyTargetAppearance` | `bool` | `SetCopyTargetAppearance=true` | `bCopyTargetAppearance` | | -| `CopySourceAppearance` | `bool` | `SetCopySourceAppearance=true` | `bCopySourceAppearance` | | -| `KnockbackAffectsSpawnLocation` | `bool` | `SetKnockbackAffectsSpawnLocation=true` | `bKnockbackAffectsSpawnLocation` | | -| `AddToSourceGroup` | `bool` | `SetAddToSourceGroup=true` | `bAddToSourceGroup` | | -| `CopyReanimatedFromUnit` | `bool` | `SetCopyReanimatedFromUnit=true` | `bCopyReanimatedFromUnit` | | -| `CopyReanimatedStatsFromUnit` | `bool` | `SetCopyReanimatedStatsFromUnit=true` | `bCopyReanimatedStatsFromUnit` | | -| `SetProcessedScamperAs` | `bool` | `SetSetProcessedScamperAs=true` | `bSetProcessedScamperAs` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Stasis` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `StunStartAnim` | `name` | `SetStunStartAnim=true` | `StunStartAnim` | | -| `StunStopAnim` | `name` | `SetStunStopAnim=true` | `StunStopAnim` | | -| `SkipFlyover` | `bool` | `SetSkipFlyover=true` | `bSkipFlyover` | | -| `StartAnimBlendTime` | `float` | `SetStartAnimBlendTime=true` | `StartAnimBlendTime` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Stunned` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `StunLevel` | `int` | `SetStunLevel=true` | `StunLevel` | | -| `SkipAnimation` | `bool` | `SetSkipAnimation=true` | `bSkipAnimation` | | -| `StunStartAnimName` | `name` | `SetStunStartAnimName=true` | `StunStartAnimName` | | -| `StunStopAnimName` | `name` | `SetStunStopAnimName=true` | `StunStopAnimName` | | -| `StunnedTriggerName` | `name` | `SetStunnedTriggerName=true` | `StunnedTriggerName` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_SuperConcealModifier` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ConcealAmountScalar` | `float` | `SetConcealAmountScalar=true` | `ConcealAmountScalar` | | -| `AbilitiesAffectedFilter` | `array` | `AbilitiesAffectedFilterMode` | `AbilitiesAffectedFilter` | | -| `RemoveOnAbilityActivation` | `array` | `RemoveOnAbilityActivationMode` | `RemoveOnAbilityActivation` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Sustain` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_Sustained` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `SustainedAbilityName` | `name` | `SetSustainedAbilityName=true` | `SustainedAbilityName` | | -| `FragileAmount` | `int` | `SetFragileAmount=true` | `FragileAmount` | | -| `EffectsToRemoveFromSource` | `array` | `EffectsToRemoveFromSourceMode` | `EffectsToRemoveFromSource` | | -| `EffectsToRemoveFromTarget` | `array` | `EffectsToRemoveFromTargetMode` | `EffectsToRemoveFromTarget` | | -| `RegisterAdditionalEventsLikeImpair` | `array` | `RegisterAdditionalEventsLikeImpairMode` | `RegisterAdditionalEventsLikeImpair` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_TalonRounds` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AimMod` | `int` | `SetAimMod=true` | `AimMod` | | -| `CritChance` | `int` | `SetCritChance=true` | `CritChance` | | -| `CritDamage` | `int` | `SetCritDamage=true` | `CritDamage` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_TargetDamageDistanceBonus` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BonusDmgFloat` | `float` | `SetBonusDmgFloat=true` | `BonusDmg` | | -| `BonusModType` | `EStatModOp` | `SetBonusModType=true` | `BonusModType` | | -| `WithinTileDistance` | `int` | `SetWithinTileDistance=true` | `WithinTileDistance` | | -| `PrimaryTargetOnly` | `bool` | `SetPrimaryTargetOnly=true` | `bPrimaryTargetOnly` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_TargetDamageTypeBonus` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BonusDmgFloat` | `float` | `SetBonusDmgFloat=true` | `BonusDmg` | | -| `BonusModType` | `EStatModOp` | `SetBonusModType=true` | `BonusModType` | | -| `BonusDamageTypes` | `array` | `BonusDamageTypesMode` | `BonusDamageTypes` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ToHitModifier` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ApplyAsTarget` | `bool` | `SetApplyAsTarget=true` | `bApplyAsTarget` | | -| `EffectHitModifiers` | `array` | non-empty *(replace-only)* | `Modifiers` | X2Effect_ToHitModifier: replace-only — when non-empty, replaces Modifiers entirely | -| `ToHitConditions` | `array` | — | | X2Effect_ToHitModifier — see [Conditions](#conditions) | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -Not editable via config: `ToHitConditions` *(array of `X2Condition`)* - -#### `X2Effect_TrackingShotMarkTarget` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ConeLength` | `float` | `SetConeLength=true` | `ConeLength` | | -| `ConeEndDiameter` | `float` | `SetConeEndDiameter=true` | `ConeEndDiameter` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_TurnStartActionPoints` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ActionPointType` | `name` | `SetActionPointType=true` | `ActionPointType` | | -| `NumActionPoints` | `int` | `SetNumActionPoints=true` | `NumActionPoints` | | -| `ActionPointsRemoved` | `bool` | `SetActionPointsRemoved=true` | `bActionPointsRemoved` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_VolatileMix` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BonusDamage` | `int` | `SetBonusDamage=true` | `BonusDamage` | | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -#### `X2Effect_ApplyDirectionalWorldDamage` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `EnvironmentalDamageAmount` | `int` | `SetEnvironmentalDamageAmount=true` | `EnvironmentalDamageAmount` | | -| `DamageTypeTemplateName` | `name` | `SetDamageTypeTemplateName=true` | `DamageTypeTemplateName` | | -| `PlusNumZTiles` | `int` | `SetPlusNumZTiles=true` | `PlusNumZTiles` | | -| `UseWeaponEnvironmentalDamage` | `bool` | `SetUseWeaponEnvironmentalDamage=true` | `bUseWeaponEnvironmentalDamage` | | -| `UseWeaponDamageType` | `bool` | `SetUseWeaponDamageType=true` | `bUseWeaponDamageType` | | -| `HitSourceTile` | `bool` | `SetHitSourceTile=true` | `bHitSourceTile` | | -| `HitTargetTile` | `bool` | `SetHitTargetTile=true` | `bHitTargetTile` | | -| `HitAdjacentDestructibles` | `bool` | `SetHitAdjacentDestructibles=true` | `bHitAdjacentDestructibles` | | -| `AllowDestructionOfDamageCauseCover` | `bool` | `SetAllowDestructionOfDamageCauseCover=true` | `bAllowDestructionOfDamageCauseCover` | | +## Troubleshooting -#### `X2Effect_ApplyMedikitHeal` +Set `EnableDebug=true` under `[AbilityEditor.X2DLCInfo_AbilityEditor]` in `XComEngine.ini`. Every applied change is then logged to `Launch.log` under the `AbilityEditor` tag - **if a field isn't in that log, it was never applied.** -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `PerUseHP` | `int` | `SetPerUseHP=true` | `PerUseHP` | | -| `IncreasedHealProject` | `name` | `SetIncreasedHealProject=true` | `IncreasedHealProject` | | -| `IncreasedPerUseHP` | `int` | `SetIncreasedPerUseHP=true` | `IncreasedPerUseHP` | | +The three usual causes: a stale config cache, a value written without its `SetX=true` guard, or a `Mode` left at its default (which is a *replace* in every mode enum). Full list: [Troubleshooting](https://boundir.github.io/AbilityEditor/guides/troubleshooting/). -#### `X2Effect_ApplyWeaponDamage` +## For developers -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ExplosiveDamage` | `bool` | `SetExplosiveDamage=true` | `bExplosiveDamage` | | -| `IgnoreBaseDamage` | `bool` | `SetIgnoreBaseDamage=true` | `bIgnoreBaseDamage` | | -| `DamageTag` | `name` | `SetDamageTag=true` | `DamageTag` | | -| `AlwaysKillsCivilians` | `bool` | `SetAlwaysKillsCivilians=true` | `bAlwaysKillsCivilians` | | -| `ApplyWorldEffectsForEachTargetLocation` | `bool` | `SetApplyWorldEffectsForEachTargetLocation=true` | `bApplyWorldEffectsForEachTargetLocation` | | -| `AllowFreeKill` | `bool` | `SetAllowFreeKill=true` | `bAllowFreeKill` | | -| `AllowWeaponUpgrade` | `bool` | `SetAllowWeaponUpgrade=true` | `bAllowWeaponUpgrade` | | -| `BypassShields` | `bool` | `SetBypassShields=true` | `bBypassShields` | | -| `IgnoreArmor` | `bool` | `SetIgnoreArmor=true` | `bIgnoreArmor` | | -| `BypassSustainEffects` | `bool` | `SetBypassSustainEffects=true` | `bBypassSustainEffects` | | -| `EnvironmentalDamageAmount` | `int` | `SetEnvironmentalDamageAmount=true` | `EnvironmentalDamageAmount` | | -| `WeaponDamageValue` | `WeaponDamageValueEdit` | — | `EffectDamageValue` | see [`WeaponDamageValueEdit`](#nested-structs) | +- [Adding an editor](https://boundir.github.io/AbilityEditor/contributing/adding-an-editor/) - conventions, and the build's Community Highlander requirement. +- [Extending from another mod](https://boundir.github.io/AbilityEditor/guides/bridge-mods/) - register your own editor classes without forking. +- [`docs/schema.json`](docs/schema.json) - the whole config API, machine-readable, for external tooling. -Not editable via config: `HideVisualizationOfResultsAdditional` *(not yet supported)* +The reference documentation is generated from the UnrealScript sources: -#### `X2Effect_Brutal` +```powershell +.\.scripts\generate-docs.ps1 -SdkPath '' # updates docs/schema.json and the block above +.\.scripts\generate-docs.ps1 -CheckOnly # exits 1 if either is stale +``` -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `WillMod` | `int` | `SetWillMod=true` | `WillMod` | | - -#### `X2Effect_EnableGlobalAbility` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `GlobalAbility` | `name` | `SetGlobalAbility=true` | `GlobalAbility` | | - -#### `X2Effect_GetOverHere` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `OverrideStartAnimName` | `Name` | `SetOverrideStartAnimName=true` | `OverrideStartAnimName` | | -| `OverrideStopAnimName` | `Name` | `SetOverrideStopAnimName=true` | `OverrideStopAnimName` | | -| `RequireVisibleTile` | `bool` | `SetRequireVisibleTile=true` | `RequireVisibleTile` | | - -#### `X2Effect_GrantActionPoints` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumActionPoints` | `int` | `SetNumActionPoints=true` | `NumActionPoints` | | -| `PointType` | `name` | `SetPointType=true` | `PointType` | | -| `ApplyOnlyWhenOut` | `bool` | `SetApplyOnlyWhenOut=true` | `bApplyOnlyWhenOut` | | -| `SelectUnit` | `bool` | `SetSelectUnit=true` | `bSelectUnit` | | -| `SkipWithEffect` | `array` | `SkipWithEffectMode` | `SkipWithEffect` | | - -#### `X2Effect_IncreaseBondmateCohesion` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `CohesionAmount` | `int` | `SetCohesionAmount=true` | `CohesionAmount` | | - -#### `X2Effect_Knockback` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `KnockbackDistance` | `int` | `SetKnockbackDistance=true` | `KnockbackDistance` | | -| `KnockbackDestroysNonFragile` | `bool` | `SetKnockbackDestroysNonFragile=true` | `bKnockbackDestroysNonFragile` | | -| `OverrideRagdollFinishTimerSec` | `float` | `SetOverrideRagdollFinishTimerSec=true` | `OverrideRagdollFinishTimerSec` | | -| `OnlyOnDeath` | `bool` | `SetOnlyOnDeath=true` | `OnlyOnDeath` | | - -#### `X2Effect_LifeSteal` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `LifeAmountMultiplier` | `float` | `SetLifeAmountMultiplier=true` | `LifeAmountMultiplier` | | - -#### `X2Effect_MarkValidActivationTiles` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AbilityToMark` | `name` | `SetAbilityToMark=true` | `AbilityToMark` | | -| `OnlyUseTargetLocation` | `bool` | `SetOnlyUseTargetLocation=true` | `OnlyUseTargetLocation` | | -| `VisualizeFlagsOnCursor` | `bool` | `SetVisualizeFlagsOnCursor=true` | `bVisualizeFlagsOnCursor` | | - -#### `X2Effect_ModifyInitiativeOrder` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `RemoveGroupFromInitiativeOrder` | `bool` | `SetRemoveGroupFromInitiativeOrder=true` | `bRemoveGroupFromInitiativeOrder` | | -| `AddGroupToInitiativeOrder` | `bool` | `SetAddGroupToInitiativeOrder=true` | `bAddGroupToInitiativeOrder` | | - -#### `X2Effect_ModifyTemplarFocus` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ModifyFocus` | `int` | `SetModifyFocus=true` | `ModifyFocus` | | - -#### `X2Effect_LethalWeaponDamage` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `LethalDamageConditions` | `array` | — | | X2Effect_LethalWeaponDamage — see [Conditions](#conditions) | -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | *(shared — from `X2AbilityEffectsEditor_Persistent`)* | - -Not editable via config: `LethalDamageConditions` *(array of `X2Condition`)* - -#### `X2Effect_Persistent` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `InfiniteDuration` | `bool` | `SetInfiniteDuration=true` | `bInfiniteDuration` | | -| `TickWhenApplied` | `bool` | `SetTickWhenApplied=true` | `bTickWhenApplied` | | -| `CanTickEveryAction` | `bool` | `SetCanTickEveryAction=true` | `bCanTickEveryAction` | | -| `ConvertTurnsToActions` | `bool` | `SetConvertTurnsToActions=true` | `bConvertTurnsToActions` | | -| `RemoveWhenSourceDies` | `bool` | `SetRemoveWhenSourceDies=true` | `bRemoveWhenSourceDies` | | -| `RemoveWhenTargetDies` | `bool` | `SetRemoveWhenTargetDies=true` | `bRemoveWhenTargetDies` | | -| `RemoveWhenSourceDamaged` | `bool` | `SetRemoveWhenSourceDamaged=true` | `bRemoveWhenSourceDamaged` | | -| `RemoveWhenTargetConcealmentBroken` | `bool` | `SetRemoveWhenTargetConcealmentBroken=true` | `bRemoveWhenTargetConcealmentBroken` | | -| `PersistThroughTacticalGameEnd` | `bool` | `SetPersistThroughTacticalGameEnd=true` | `bPersistThroughTacticalGameEnd` | | -| `IgnorePlayerCheckOnTick` | `bool` | `SetIgnorePlayerCheckOnTick=true` | `bIgnorePlayerCheckOnTick` | | -| `UniqueTarget` | `bool` | `SetUniqueTarget=true` | `bUniqueTarget` | | -| `StackOnRefresh` | `bool` | `SetStackOnRefresh=true` | `bStackOnRefresh` | | -| `DupeForSameSourceOnly` | `bool` | `SetDupeForSameSourceOnly=true` | `bDupeForSameSourceOnly` | | -| `EffectForcesBleedout` | `bool` | `SetEffectForcesBleedout=true` | `bEffectForcesBleedout` | | -| `DisplayInUI` | `bool` | `SetDisplayInUI=true` | `bDisplayInUI` | | -| `DisplayInSpecialDamageMessageUI` | `bool` | `SetDisplayInSpecialDamageMessageUI=true` | `bDisplayInSpecialDamageMessageUI` | | -| `SourceDisplayInUI` | `bool` | `SetSourceDisplayInUI=true` | `bSourceDisplayInUI` | | -| `NumTurns` | `int` | `SetNumTurns=true` | `iNumTurns` | | -| `InitialShedChance` | `int` | `SetInitialShedChance=true` | `iInitialShedChance` | | -| `PerTurnShedChance` | `int` | `SetPerTurnShedChance=true` | `iPerTurnShedChance` | | -| `EffectRank` | `int` | `SetEffectRank=true` | `EffectRank` | | -| `EffectHierarchyValue` | `int` | `SetEffectHierarchyValue=true` | `EffectHierarchyValue` | | -| `VisionArcDegreesOverride` | `float` | `SetVisionArcDegreesOverride=true` | `VisionArcDegreesOverride` | | -| `CustomIdleOverrideAnim` | `name` | `SetCustomIdleOverrideAnim=true` | `CustomIdleOverrideAnim` | | -| `EffectName` | `name` | `SetEffectName=true` | `EffectName` | | -| `AbilitySourceName` | `name` | `SetAbilitySourceName=true` | `AbilitySourceName` | | -| `EffectAppliedEventName` | `name` | `SetEffectAppliedEventName=true` | `EffectAppliedEventName` | | -| `ChanceEventTriggerName` | `name` | `SetChanceEventTriggerName=true` | `ChanceEventTriggerName` | | -| `VFXSocket` | `name` | `SetVFXSocket=true` | `VFXSocket` | | -| `VFXSocketsArrayName` | `name` | `SetVFXSocketsArrayName=true` | `VFXSocketsArrayName` | | -| `FriendlyName` | `string` | `SetFriendlyName=true` | `FriendlyName` | | -| `FriendlyDescription` | `string` | `SetFriendlyDescription=true` | `FriendlyDescription` | | -| `IconImage` | `string` | `SetIconImage=true` | `IconImage` | | -| `SourceFriendlyName` | `string` | `SetSourceFriendlyName=true` | `SourceFriendlyName` | | -| `SourceFriendlyDescription` | `string` | `SetSourceFriendlyDescription=true` | `SourceFriendlyDescription` | | -| `SourceIconLabel` | `string` | `SetSourceIconLabel=true` | `SourceIconLabel` | | -| `StatusIcon` | `string` | `SetStatusIcon=true` | `StatusIcon` | | -| `VFXTemplateName` | `string` | `SetVFXTemplateName=true` | `VFXTemplateName` | | -| `PersistentPerkName` | `string` | `SetPersistentPerkName=true` | `PersistentPerkName` | | - -Not editable via config: `TickTriggers` *(array of `X2EffectTrigger`)*, `DuplicateResponse` *(not yet supported)*, `ApplyOnTick` *(array of `X2Effect`)*, `WatchRule` *(type `GameRuleStateChange`)*, `BuffCategory` *(not yet supported)*, `SourceBuffCategory` *(not yet supported)*, `GameStateEffectClass` *(class reference)*, `VisualizationFn` *(delegate — code-only)*, `CleansedVisualizationFn` *(delegate — code-only)*, `EffectTickedVisualizationFn` *(delegate — code-only)*, `EffectSyncVisualizationFn` *(delegate — code-only)*, `EffectRemovedVisualizationFn` *(delegate — code-only)*, `EffectRemovedSourceVisualizationFn` *(delegate — code-only)*, `DeathVisualizationFn` *(delegate — code-only)*, `ModifyTracksFn` *(delegate — code-only)*, `EffectRemovedFn` *(delegate — code-only)*, `EffectAddedFn` *(delegate — code-only)*, `EffectTickedFn` *(delegate — code-only)*, `GetModifyChosenActivationIncreasePerUseFn` *(delegate — code-only)*, `UnitBreaksConcealmentIgnoringDistanceFn` *(delegate — code-only)* - -#### `X2Effect_ReduceCooldowns` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `Amount` | `int` | `SetAmount=true` | `Amount` | | -| `ReduceAll` | `bool` | `SetReduceAll=true` | `ReduceAll` | | -| `AbilitiesToTick` | `array` | `AbilitiesToTickMode` | `AbilitiesToTick` | | - -#### `X2Effect_RemoteStart` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `UnitDamageMultiplier` | `float` | `SetUnitDamageMultiplier=true` | `UnitDamageMultiplier` | | -| `DamageRadiusMultiplier` | `float` | `SetDamageRadiusMultiplier=true` | `DamageRadiusMultiplier` | | - -#### `X2Effect_RemoveEffects` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `Cleanse` | `bool` | `SetCleanse=true` | `bCleanse` | | -| `CheckSource` | `bool` | `SetCheckSource=true` | `bCheckSource` | | -| `DoNotVisualize` | `bool` | `SetDoNotVisualize=true` | `bDoNotVisualize` | | -| `EffectNamesToRemove` | `array` | `EffectNamesToRemoveMode` | `EffectNamesToRemove` | | - -#### `X2Effect_ReserveActionPoints` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ReserveType` | `name` | `SetReserveType=true` | `ReserveType` | | -| `NumPoints` | `int` | `SetNumPoints=true` | `NumPoints` | | - -#### `X2Effect_SetUnitValue` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `UnitName` | `name` | `SetUnitName=true` | `UnitName` | | -| `NewValueToSet` | `float` | `SetNewValueToSet=true` | `NewValueToSet` | | -| `CleanupType` | `EUnitValueCleanup` | `SetCleanupType=true` | `CleanupType` | | - -#### `X2Effect_SoulSteal` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `UnitValueToRead` | `name` | `SetUnitValueToRead=true` | `UnitValueToRead` | | - -#### `X2Effect_Spotted` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BecomeUnspotted` | `bool` | `SetBecomeUnspotted=true` | `m_bBecomeUnspotted` | | - -#### `X2Effect_SuspendMissionTimer` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ResumeMissionTimer` | `bool` | `SetResumeMissionTimer=true` | `bResumeMissionTimer` | | - -#### `X2Effect_TriggerEvent` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `TriggerEventName` | `name` | `SetTriggerEventName=true` | `TriggerEventName` | | -| `PassTargetAsSource` | `bool` | `SetPassTargetAsSource=true` | `PassTargetAsSource` | | - -#### `X2Effect_VoidConduit` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `DamagePerAction` | `int` | `SetDamagePerAction=true` | `DamagePerAction` | | -| `HealthReturnMod` | `float` | `SetHealthReturnMod=true` | `HealthReturnMod` | | - -#### `X2Effect_World` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `CenterTile` | `bool` | `SetCenterTile=true` | `bCenterTile` | | - -#### Any other class - -Handled by `X2AbilityEffectsEditor_Base`: only the shared fields above apply. - -### Conditions - -Conditions can be edited in seven places: the template-level arrays (`ShooterConditions`, `TargetConditions`, `MultiTargetConditions` directly inside an `AbilityEdit`) and, inside an `Effects` entry, the effect's own `TargetConditions` plus the class-specific `ApplyDamageModConditions`, `LethalDamageConditions` and `ToHitConditions`. All take an array of `ConditionEdit` entries. Within the targeted array, the condition of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`. - -Structural fields: - -| Config key | Type | Notes | -|---|---|---| -| `Class` | `string` | Condition class to target/instantiate, e.g. `X2Condition_UnitProperty`. Bare names are auto-prefixed with `XComGame.`. | -| `Mode` | `EArrayEditMode` | Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes). | -| `CustomProperties` | `array` | Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors. | - -Editor dispatch order (first match wins): `X2Condition_UnitEffectsApplying` → `X2Condition_UnitEffectsOnSource` → `X2Condition_UnitEffectsWithAbilitySource` → `X2Condition_UnitEffectsWithAbilityTarget` → `X2Condition_AbilityProperty` → `X2Condition_AbilitySourceWeapon` → `X2Condition_BattleState` → `X2Condition_BerserkerDevastatingPunch` → `X2Condition_Bondmate` → `X2Condition_DarkEvent` → `X2Condition_EverVigilant` → `X2Condition_FuseTarget` → `X2Condition_GameplayTag` → `X2Condition_HackingTarget` → `X2Condition_Interactive` → `X2Condition_Lootable` → `X2Condition_MapProperty` → `X2Condition_OnGroundTile` → `X2Condition_PanicOnPod` → `X2Condition_PlayerTurns` → `X2Condition_StasisLanceTarget` → `X2Condition_StasisTarget` → `X2Condition_Stealth` → `X2Condition_UnblockedNeighborTile` → `X2Condition_UnitActionPoints` → `X2Condition_UnitAlertStatus` → `X2Condition_UnitEffects` → `X2Condition_UnitImmunities` → `X2Condition_UnitInEvacZone` → `X2Condition_UnitInteractions` → `X2Condition_UnitInventory` → `X2Condition_UnitProperty` → `X2Condition_UnitStatCheck` → `X2Condition_UnitType` → `X2Condition_UnitValue` → `X2Condition_Visibility` → any other class - -#### `X2Condition_UnitEffectsApplying` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ExcludeEffects` | `array` | `ExcludeEffectsMode` | `ExcludeEffects` | *(shared — from `X2AbilityConditionEditor_UnitEffects`)* | -| `RequireEffects` | `array` | `RequireEffectsMode` | `RequireEffects` | *(shared — from `X2AbilityConditionEditor_UnitEffects`)* | - -#### `X2Condition_UnitEffectsOnSource` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ExcludeEffects` | `array` | `ExcludeEffectsMode` | `ExcludeEffects` | *(shared — from `X2AbilityConditionEditor_UnitEffects`)* | -| `RequireEffects` | `array` | `RequireEffectsMode` | `RequireEffects` | *(shared — from `X2AbilityConditionEditor_UnitEffects`)* | - -#### `X2Condition_UnitEffectsWithAbilitySource` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ExcludeEffects` | `array` | `ExcludeEffectsMode` | `ExcludeEffects` | *(shared — from `X2AbilityConditionEditor_UnitEffects`)* | -| `RequireEffects` | `array` | `RequireEffectsMode` | `RequireEffects` | *(shared — from `X2AbilityConditionEditor_UnitEffects`)* | - -#### `X2Condition_UnitEffectsWithAbilityTarget` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ExcludeEffects` | `array` | `ExcludeEffectsMode` | `ExcludeEffects` | *(shared — from `X2AbilityConditionEditor_UnitEffects`)* | -| `RequireEffects` | `array` | `RequireEffectsMode` | `RequireEffects` | *(shared — from `X2AbilityConditionEditor_UnitEffects`)* | - -#### `X2Condition_AbilityProperty` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `TargetMustBeInValidTiles` | `bool` | `SetTargetMustBeInValidTiles=true` | `TargetMustBeInValidTiles` | | -| `OwnerHasSoldierAbilities` | `array` | `OwnerHasSoldierAbilitiesMode` | `OwnerHasSoldierAbilities` | | - -#### `X2Condition_AbilitySourceWeapon` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `WantsReload` | `bool` | `SetWantsReload=true` | `WantsReload` | | -| `CheckAmmo` | `bool` | `SetCheckAmmo=true` | `CheckAmmo` | | -| `CheckAmmoData` | `CheckConfig` | `SetCheckAmmoData=true` | `CheckAmmoData` | | -| `NotLoadedAmmoInSecondaryWeapon` | `bool` | `SetNotLoadedAmmoInSecondaryWeapon=true` | `NotLoadedAmmoInSecondaryWeapon` | | -| `MatchGrenadeType` | `name` | `SetMatchGrenadeType=true` | `MatchGrenadeType` | | -| `CheckGrenadeFriendlyFire` | `bool` | `SetCheckGrenadeFriendlyFire=true` | `CheckGrenadeFriendlyFire` | | -| `CheckAmmoTechLevel` | `bool` | `SetCheckAmmoTechLevel=true` | `CheckAmmoTechLevel` | | -| `MatchWeaponTemplate` | `name` | `SetMatchWeaponTemplate=true` | `MatchWeaponTemplate` | | - -#### `X2Condition_BattleState` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `MissionAborted` | `bool` | `SetMissionAborted=true` | `bMissionAborted` | | -| `MissionNotAborted` | `bool` | `SetMissionNotAborted=true` | `bMissionNotAborted` | | -| `CiviliansTargetedByAliens` | `bool` | `SetCiviliansTargetedByAliens=true` | `bCiviliansTargetedByAliens` | | -| `CiviliansNotTargetedByAliens` | `bool` | `SetCiviliansNotTargetedByAliens=true` | `bCiviliansNotTargetedByAliens` | | -| `IncludeTheLostInEngagedCount` | `bool` | `SetIncludeTheLostInEngagedCount=true` | `bIncludeTheLostInEngagedCount` | | -| `MinEngagedEnemies` | `int` | `SetMinEngagedEnemies=true` | `MinEngagedEnemies` | | -| `MaxEngagedEnemies` | `int` | `SetMaxEngagedEnemies=true` | `MaxEngagedEnemies` | | - -#### `X2Condition_BerserkerDevastatingPunch` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `FailOnNonUnitTargets` | `bool` | `SetFailOnNonUnitTargets=true` | `bFailOnNonUnitTargets` | | - -#### `X2Condition_Bondmate` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `MinBondLevel` | `int` | `SetMinBondLevel=true` | `MinBondLevel` | | -| `MaxBondLevel` | `int` | `SetMaxBondLevel=true` | `MaxBondLevel` | | -| `RequiresAdjacency` | `AdjacencyRequirement` | `SetRequiresAdjacency=true` | `RequiresAdjacency` | | -| `SkipCheckWithSource` | `bool` | `SetSkipCheckWithSource=true` | `bSkipCheckWithSource` | | - -#### `X2Condition_DarkEvent` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `StilettoRounds` | `bool` | `SetStilettoRounds=true` | `bStilettoRounds` | | - -#### `X2Condition_EverVigilant` - -No class-specific fields; the shared fields above apply. - -#### `X2Condition_FuseTarget` - -No class-specific fields; the shared fields above apply. - -#### `X2Condition_GameplayTag` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `RequiredGameplayTag` | `name` | `SetRequiredGameplayTag=true` | `RequiredGameplayTag` | | -| `DisallowGameplayTag` | `name` | `SetDisallowGameplayTag=true` | `DisallowGameplayTag` | | - -#### `X2Condition_HackingTarget` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `IntrusionProtocol` | `bool` | `SetIntrusionProtocol=true` | `bIntrusionProtocol` | | -| `HaywireProtocol` | `bool` | `SetHaywireProtocol=true` | `bHaywireProtocol` | | -| `RequiredAbilityName` | `name` | `SetRequiredAbilityName=true` | `RequiredAbilityName` | | -| `MustBeDoor` | `bool` | `SetMustBeDoor=true` | `bMustBeDoor` | | - -#### `X2Condition_Interactive` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `InteractionType` | `UnitInterationType` | `SetInteractionType=true` | `InteractionType` | | -| `RequiredAbilityName` | `name` | `SetRequiredAbilityName=true` | `RequiredAbilityName` | | - -#### `X2Condition_Lootable` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `RestrictRange` | `bool` | `SetRestrictRange=true` | `bRestrictRange` | | -| `LootableRange` | `int` | `SetLootableRange=true` | `LootableRange` | | - -#### `X2Condition_MapProperty` - -No class-specific fields; the shared fields above apply. - -Not editable via config: `AllowedBiomes` *(array of `string`)* - -#### `X2Condition_OnGroundTile` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NotAFloorTileTag` | `name` | `SetNotAFloorTileTag=true` | `NotAFloorTileTag` | | - -#### `X2Condition_PanicOnPod` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `MaxPanicUnitsPerPod` | `int` | `SetMaxPanicUnitsPerPod=true` | `MaxPanicUnitsPerPod` | | - -#### `X2Condition_PlayerTurns` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumTurnsCheck` | `CheckConfig` | `SetNumTurnsCheck=true` | `NumTurnsCheck` | | - -#### `X2Condition_StasisLanceTarget` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `HackAbilityName` | `Name` | `SetHackAbilityName=true` | `HackAbilityName` | | - -#### `X2Condition_StasisTarget` - -No class-specific fields; the shared fields above apply. - -#### `X2Condition_Stealth` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `CheckFlanking` | `bool` | `SetCheckFlanking=true` | `bCheckFlanking` | | - -#### `X2Condition_UnblockedNeighborTile` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `RequireVisible` | `bool` | `SetRequireVisible=true` | `RequireVisible` | | - -#### `X2Condition_UnitActionPoints` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ActionPointChecks` | `array` | `ActionPointChecksMode` | `m_aCheckValues` | | - -#### `X2Condition_UnitAlertStatus` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `RequiredAlertStatusMaximum` | `int` | `SetRequiredAlertStatusMaximum=true` | `RequiredAlertStatusMaximum` | | -| `RequiredAlertStatusMinimum` | `int` | `SetRequiredAlertStatusMinimum=true` | `RequiredAlertStatusMinimum` | | - -#### `X2Condition_UnitEffects` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ExcludeEffects` | `array` | `ExcludeEffectsMode` | `ExcludeEffects` | | -| `RequireEffects` | `array` | `RequireEffectsMode` | `RequireEffects` | | - -#### `X2Condition_UnitImmunities` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `OnlyOnCharacterTemplate` | `bool` | `SetOnlyOnCharacterTemplate=true` | `bOnlyOnCharacterTemplate` | | -| `ExcludeDamageTypes` | `array` | `ExcludeDamageTypesMode` | `ExcludeDamageTypes` | | - -#### `X2Condition_UnitInEvacZone` - -No class-specific fields; the shared fields above apply. - -#### `X2Condition_UnitInteractions` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `InteractionType` | `UnitInterationType` | `SetInteractionType=true` | `InteractionType` | | - -#### `X2Condition_UnitInventory` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `RelevantSlot` | `EInventorySlot` | `SetRelevantSlot=true` | `RelevantSlot` | | -| `ExcludeWeaponCategory` | `name` | `SetExcludeWeaponCategory=true` | `ExcludeWeaponCategory` | | -| `RequireWeaponCategory` | `name` | `SetRequireWeaponCategory=true` | `RequireWeaponCategory` | | - -#### `X2Condition_UnitProperty` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ExcludeAlive` | `bool` | `SetExcludeAlive=true` | `ExcludeAlive` | | -| `ExcludeDead` | `bool` | `SetExcludeDead=true` | `ExcludeDead` | | -| `ExcludeRobotic` | `bool` | `SetExcludeRobotic=true` | `ExcludeRobotic` | | -| `ExcludeOrganic` | `bool` | `SetExcludeOrganic=true` | `ExcludeOrganic` | | -| `ExcludeCivilian` | `bool` | `SetExcludeCivilian=true` | `ExcludeCivilian` | | -| `ExcludeNonCivilian` | `bool` | `SetExcludeNonCivilian=true` | `ExcludeNonCivilian` | | -| `ExcludeCosmetic` | `bool` | `SetExcludeCosmetic=true` | `ExcludeCosmetic` | | -| `ExcludeImpaired` | `bool` | `SetExcludeImpaired=true` | `ExcludeImpaired` | | -| `ExcludePanicked` | `bool` | `SetExcludePanicked=true` | `ExcludePanicked` | | -| `ExcludeInStasis` | `bool` | `SetExcludeInStasis=true` | `ExcludeInStasis` | | -| `ExcludeTurret` | `bool` | `SetExcludeTurret=true` | `ExcludeTurret` | | -| `ExcludePsionic` | `bool` | `SetExcludePsionic=true` | `ExcludePsionic` | | -| `ExcludeNonPsionic` | `bool` | `SetExcludeNonPsionic=true` | `ExcludeNonPsionic` | | -| `IsAdvent` | `bool` | `SetIsAdvent=true` | `IsAdvent` | | -| `ExcludeAdvent` | `bool` | `SetExcludeAdvent=true` | `ExcludeAdvent` | | -| `ExcludeNoCover` | `bool` | `SetExcludeNoCover=true` | `ExcludeNoCover` | | -| `ExcludeNoCoverToSource` | `bool` | `SetExcludeNoCoverToSource=true` | `ExcludeNoCoverToSource` | | -| `ExcludeFullHealth` | `bool` | `SetExcludeFullHealth=true` | `ExcludeFullHealth` | | -| `IsBleedingOut` | `bool` | `SetIsBleedingOut=true` | `IsBleedingOut` | | -| `IsUnspotted` | `bool` | `SetIsUnspotted=true` | `IsUnspotted` | | -| `CanBeCarried` | `bool` | `SetCanBeCarried=true` | `CanBeCarried` | | -| `IsOutdoors` | `bool` | `SetIsOutdoors=true` | `IsOutdoors` | | -| `IsConcealed` | `bool` | `SetIsConcealed=true` | `IsConcealed` | | -| `ExcludeConcealed` | `bool` | `SetExcludeConcealed=true` | `ExcludeConcealed` | | -| `IsSuperConcealed` | `bool` | `SetIsSuperConcealed=true` | `IsSuperConcealed` | | -| `IsImpaired` | `bool` | `SetIsImpaired=true` | `IsImpaired` | | -| `HasClearanceToMaxZ` | `bool` | `SetHasClearanceToMaxZ=true` | `HasClearanceToMaxZ` | | -| `ExcludeAlien` | `bool` | `SetExcludeAlien=true` | `ExcludeAlien` | | -| `ExcludeNonHumanoidAliens` | `bool` | `SetExcludeNonHumanoidAliens=true` | `ExcludeNonHumanoidAliens` | | -| `ExcludeStunned` | `bool` | `SetExcludeStunned=true` | `ExcludeStunned` | | -| `ExcludeDazed` | `bool` | `SetExcludeDazed=true` | `ExcludeDazed` | | -| `ExcludeUnableToAct` | `bool` | `SetExcludeUnableToAct=true` | `ExcludeUnableToAct` | | -| `IsPlayerControlled` | `bool` | `SetIsPlayerControlled=true` | `IsPlayerControlled` | | -| `ExcludeUnrevealedAI` | `bool` | `SetExcludeUnrevealedAI=true` | `ExcludeUnrevealedAI` | | -| `IncludeWeakAgainstTechLikeRobot` | `bool` | `SetIncludeWeakAgainstTechLikeRobot=true` | `IncludeWeakAgainstTechLikeRobot` | | -| `ImpairedIgnoresStuns` | `bool` | `SetImpairedIgnoresStuns=true` | `ImpairedIgnoresStuns` | | -| `IsScampering` | `bool` | `SetIsScampering=true` | `IsScampering` | | -| `ExcludeDeadFromSpecialDeath` | `bool` | `SetExcludeDeadFromSpecialDeath=true` | `ExcludeDeadFromSpecialDeath` | | -| `ExcludeLargeUnits` | `bool` | `SetExcludeLargeUnits=true` | `ExcludeLargeUnits` | | -| `ImpairedIgnoresImpairingMomentarily` | `bool` | `SetImpairedIgnoresImpairingMomentarily=true` | `ImpairedIgnoresImpairingMomentarily` | | -| `ExcludeHostileToSource` | `bool` | `SetExcludeHostileToSource=true` | `ExcludeHostileToSource` | | -| `ExcludeFriendlyToSource` | `bool` | `SetExcludeFriendlyToSource=true` | `ExcludeFriendlyToSource` | | -| `TreatMindControlledSquadmateAsHostile` | `bool` | `SetTreatMindControlledSquadmateAsHostile=true` | `TreatMindControlledSquadmateAsHostile` | | -| `ExcludeSquadmates` | `bool` | `SetExcludeSquadmates=true` | `ExcludeSquadmates` | | -| `RequireSquadmates` | `bool` | `SetRequireSquadmates=true` | `RequireSquadmates` | | -| `RequireWithinRange` | `bool` | `SetRequireWithinRange=true` | `RequireWithinRange` | | -| `RequireWithinMinRange` | `bool` | `SetRequireWithinMinRange=true` | `RequireWithinMinRange` | | -| `BeingCarriedBySource` | `bool` | `SetBeingCarriedBySource=true` | `BeingCarriedBySource` | | -| `RequireUnitSelectedFromHQ` | `bool` | `SetRequireUnitSelectedFromHQ=true` | `RequireUnitSelectedFromHQ` | | -| `FailOnNonUnits` | `bool` | `SetFailOnNonUnits=true` | `FailOnNonUnits` | | -| `MinRank` | `int` | `SetMinRank=true` | `MinRank` | | -| `MaxRank` | `int` | `SetMaxRank=true` | `MaxRank` | | -| `WithinRange` | `float` | `SetWithinRange=true` | `WithinRange` | | -| `WithinMinRange` | `float` | `SetWithinMinRange=true` | `WithinMinRange` | | -| `ExcludeSoldierClasses` | `array` | `ExcludeSoldierClassesMode` | `ExcludeSoldierClasses` | | -| `RequireSoldierClasses` | `array` | `RequireSoldierClassesMode` | `RequireSoldierClasses` | | - -#### `X2Condition_UnitStatCheck` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `CheckStats` | `array` | `CheckStatsMode` | `m_aCheckStats` | | - -#### `X2Condition_UnitType` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `IncludeTypes` | `array` | `IncludeTypesMode` | `IncludeTypes` | | -| `ExcludeTypes` | `array` | `ExcludeTypesMode` | `ExcludeTypes` | | - -#### `X2Condition_UnitValue` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `CheckValues` | `array` | `CheckValuesMode` | `m_aCheckValues` | | - -#### `X2Condition_Visibility` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NoEnemyViewers` | `bool` | `SetNoEnemyViewers=true` | `bNoEnemyViewers` | | -| `RequireMatchCoverType` | `bool` | `SetRequireMatchCoverType=true` | `bRequireMatchCoverType` | | -| `RequireNotMatchCoverType` | `bool` | `SetRequireNotMatchCoverType=true` | `bRequireNotMatchCoverType` | | -| `TargetCover` | `ECoverType` | `SetTargetCover=true` | `TargetCover` | | -| `CannotPeek` | `bool` | `SetCannotPeek=true` | `bCannotPeek` | | -| `RequireLOS` | `bool` | `SetRequireLOS=true` | `bRequireLOS` | | -| `RequireBasicVisibility` | `bool` | `SetRequireBasicVisibility=true` | `bRequireBasicVisibility` | | -| `RequireGameplayVisible` | `bool` | `SetRequireGameplayVisible=true` | `bRequireGameplayVisible` | | -| `AllowSquadsight` | `bool` | `SetAllowSquadsight=true` | `bAllowSquadsight` | | -| `ActAsSquadsight` | `bool` | `SetActAsSquadsight=true` | `bActAsSquadsight` | | -| `VisibleToAnyAlly` | `bool` | `SetVisibleToAnyAlly=true` | `bVisibleToAnyAlly` | | -| `DisablePeeksOnMovement` | `bool` | `SetDisablePeeksOnMovement=true` | `bDisablePeeksOnMovement` | | -| `ExcludeGameplayVisible` | `bool` | `SetExcludeGameplayVisible=true` | `bExcludeGameplayVisible` | | -| `RequireGameplayVisibleTags` | `array` | `RequireGameplayVisibleTagsMode` | `RequireGameplayVisibleTags` | | - -#### Any other class - -Handled by `X2AbilityConditionEditor_Base`: only the shared fields above apply. - -### ToHitCalc (`ToHitCalc`) - -Edits the template's to-hit calculation. Two slots exist: `ToHitCalc` (`Template.AbilityToHitCalc`) and `ToHitOwnerOnMissCalc` (`Template.AbilityToHitOwnerOnMissCalc`), both taking a `ToHitCalcEdit` block. With `Class` **omitted**, the existing calc is edited **in place**; with `Class` set, the existing calc is edited in place when it is already exactly that class, otherwise it is **replaced** by a new instance (unset fields then take class defaults). Classes without a dedicated editor below (e.g. `X2AbilityToHitCalc_StandardMelee`, `X2AbilityToHitCalc_DeadEye`) are still valid `Class` values — they get the fields of their nearest listed ancestor. - -Structural fields: - -| Config key | Type | Notes | -|---|---|---| -| `Class` | `string` | Optional. Omitted = edit the existing calc in place. Set = target/instantiate that class, e.g. `X2AbilityToHitCalc_StandardAim`. Bare names are auto-prefixed with `XComGame.`. | -| `CustomProperties` | `array` | Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors. | - -Editor dispatch order (first match wins): `X2AbilityToHitCalc_StatCheck_UnitVsUnit` → `X2AbilityToHitCalc_PercentChancePlusFocus` → `X2AbilityToHitCalc_PercentChanceWithBuddyZone` → `X2AbilityToHitCalc_StandardAim` → `X2AbilityToHitCalc_PercentChance` → `X2AbilityToHitCalc_Hacking` → `X2AbilityToHitCalc_RollStat` → `X2AbilityToHitCalc_RollStatTiers` → `X2AbilityToHitCalc_StatCheck` → any other class - -Shared fields (available for **every** class of this family): - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `HitModifiers` | `array` | non-empty *(replace-only)* | `HitModifiers` | Replace-only: when non-empty, replaces the calc's HitModifiers array entirely | - -#### `X2AbilityToHitCalc_StatCheck_UnitVsUnit` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AttackerStat` | `ECharStatType` | `SetAttackerStat=true` | `AttackerStat` | | -| `DefenderStat` | `ECharStatType` | `SetDefenderStat=true` | `DefenderStat` | | -| `BaseValue` | `int` | `SetBaseValue=true` | `BaseValue` | *(shared — from `X2AbilityToHitCalcEditor_StatCheck`)* | - -#### `X2AbilityToHitCalc_PercentChancePlusFocus` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `FocusMultiplier` | `int` | `SetFocusMultiplier=true` | `FocusMultiplier` | | -| `PercentToHit` | `int` | `SetPercentToHit=true` | `PercentToHit` | *(shared — from `X2AbilityToHitCalcEditor_PercentChance`)* | -| `NoGameStateOnMiss` | `bool` | `SetNoGameStateOnMiss=true` | `bNoGameStateOnMiss` | *(shared — from `X2AbilityToHitCalcEditor_PercentChance`)* | - -#### `X2AbilityToHitCalc_PercentChanceWithBuddyZone` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `PercentToHitInBuddyZone` | `int` | `SetPercentToHitInBuddyZone=true` | `PercentToHitInBuddyZone` | | -| `PercentToHit` | `int` | `SetPercentToHit=true` | `PercentToHit` | *(shared — from `X2AbilityToHitCalcEditor_PercentChance`)* | -| `NoGameStateOnMiss` | `bool` | `SetNoGameStateOnMiss=true` | `bNoGameStateOnMiss` | *(shared — from `X2AbilityToHitCalcEditor_PercentChance`)* | - -#### `X2AbilityToHitCalc_StandardAim` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `IndirectFire` | `bool` | `SetIndirectFire=true` | `bIndirectFire` | | -| `MeleeAttack` | `bool` | `SetMeleeAttack=true` | `bMeleeAttack` | | -| `ReactionFire` | `bool` | `SetReactionFire=true` | `bReactionFire` | | -| `AllowCrit` | `bool` | `SetAllowCrit=true` | `bAllowCrit` | | -| `HitsAreCrits` | `bool` | `SetHitsAreCrits=true` | `bHitsAreCrits` | | -| `MultiTargetOnly` | `bool` | `SetMultiTargetOnly=true` | `bMultiTargetOnly` | | -| `OnlyMultiHitWithSuccess` | `bool` | `SetOnlyMultiHitWithSuccess=true` | `bOnlyMultiHitWithSuccess` | | -| `GuaranteedHit` | `bool` | `SetGuaranteedHit=true` | `bGuaranteedHit` | | -| `IgnoreCoverBonus` | `bool` | `SetIgnoreCoverBonus=true` | `bIgnoreCoverBonus` | | -| `FinalMultiplier` | `float` | `SetFinalMultiplier=true` | `FinalMultiplier` | | -| `BuiltInHitMod` | `int` | `SetBuiltInHitMod=true` | `BuiltInHitMod` | | -| `BuiltInCritMod` | `int` | `SetBuiltInCritMod=true` | `BuiltInCritMod` | | - -#### `X2AbilityToHitCalc_PercentChance` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `PercentToHit` | `int` | `SetPercentToHit=true` | `PercentToHit` | | -| `NoGameStateOnMiss` | `bool` | `SetNoGameStateOnMiss=true` | `bNoGameStateOnMiss` | | - -#### `X2AbilityToHitCalc_Hacking` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AlwaysSucceed` | `bool` | `SetAlwaysSucceed=true` | `bAlwaysSucceed` | | - -#### `X2AbilityToHitCalc_RollStat` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `StatToRoll` | `ECharStatType` | `SetStatToRoll=true` | `StatToRoll` | | -| `BaseChance` | `int` | `SetBaseChance=true` | `BaseChance` | | - -#### `X2AbilityToHitCalc_RollStatTiers` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `StatToRoll` | `ECharStatType` | `SetStatToRoll=true` | `StatToRoll` | | - -#### `X2AbilityToHitCalc_StatCheck` - -*Abstract class — existing instances (of its subclasses) can be edited in place, but it cannot be added as a new instance from config.* - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `BaseValue` | `int` | `SetBaseValue=true` | `BaseValue` | | - -#### Any other class - -Handled by `X2AbilityToHitCalcEditor_Base`: only the shared fields above apply. - -### TargetStyle (`TargetStyle`) - -Edits `Template.AbilityTargetStyle` (how the ability picks its primary target). Same in-place/replace semantics as `ToHitCalc`. Field-less styles (`X2AbilityTarget_Self`, `X2AbilityTarget_Path`, ...) are valid `Class` values for swapping the style. - -Structural fields: - -| Config key | Type | Notes | -|---|---|---| -| `Class` | `string` | Optional. Omitted = edit the existing style in place. Set = target/instantiate that class, e.g. `X2AbilityTarget_Cursor`. Bare names are auto-prefixed with `XComGame.`. | -| `CustomProperties` | `array` | Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors. | - -Editor dispatch order (first match wins): `X2AbilityTarget_MovingMelee` → `X2AbilityTarget_Single` → `X2AbilityTarget_Cursor` → any other class - -#### `X2AbilityTarget_MovingMelee` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `MovementRangeAdjustment` | `int` | `SetMovementRangeAdjustment=true` | `MovementRangeAdjustment` | | -| `OnlyIncludeTargetsInsideWeaponRange` | `bool` | `SetOnlyIncludeTargetsInsideWeaponRange=true` | `OnlyIncludeTargetsInsideWeaponRange` | *(shared — from `X2AbilityTargetStyleEditor_Single`)* | -| `AllowInteractiveObjects` | `bool` | `SetAllowInteractiveObjects=true` | `bAllowInteractiveObjects` | *(shared — from `X2AbilityTargetStyleEditor_Single`)* | -| `AllowDestructibleObjects` | `bool` | `SetAllowDestructibleObjects=true` | `bAllowDestructibleObjects` | *(shared — from `X2AbilityTargetStyleEditor_Single`)* | -| `IncludeSelf` | `bool` | `SetIncludeSelf=true` | `bIncludeSelf` | *(shared — from `X2AbilityTargetStyleEditor_Single`)* | -| `ShowAOE` | `bool` | `SetShowAOE=true` | `bShowAOE` | *(shared — from `X2AbilityTargetStyleEditor_Single`)* | - -#### `X2AbilityTarget_Single` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `OnlyIncludeTargetsInsideWeaponRange` | `bool` | `SetOnlyIncludeTargetsInsideWeaponRange=true` | `OnlyIncludeTargetsInsideWeaponRange` | | -| `AllowInteractiveObjects` | `bool` | `SetAllowInteractiveObjects=true` | `bAllowInteractiveObjects` | | -| `AllowDestructibleObjects` | `bool` | `SetAllowDestructibleObjects=true` | `bAllowDestructibleObjects` | | -| `IncludeSelf` | `bool` | `SetIncludeSelf=true` | `bIncludeSelf` | | -| `ShowAOE` | `bool` | `SetShowAOE=true` | `bShowAOE` | | - -#### `X2AbilityTarget_Cursor` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `RestrictToWeaponRange` | `bool` | `SetRestrictToWeaponRange=true` | `bRestrictToWeaponRange` | | -| `IncreaseWeaponRange` | `int` | `SetIncreaseWeaponRange=true` | `IncreaseWeaponRange` | | -| `RestrictToSquadsightRange` | `bool` | `SetRestrictToSquadsightRange=true` | `bRestrictToSquadsightRange` | | -| `FixedAbilityRange` | `int` | `SetFixedAbilityRange=true` | `FixedAbilityRange` | | - -#### Any other class - -Handled by `X2AbilityTargetStyleEditor_Base`: only the shared fields above apply. - -### MultiTargetStyle (`MultiTargetStyle`) - -Edits the template's multi-target styles. Two slots exist: `MultiTargetStyle` (`Template.AbilityMultiTargetStyle`) and `PassiveAOEStyle` (`Template.AbilityPassiveAOEStyle`), both taking a `MultiTargetStyleEdit` block. Same in-place/replace semantics as `ToHitCalc`. - -Structural fields: - -| Config key | Type | Notes | -|---|---|---| -| `Class` | `string` | Optional. Omitted = edit the existing style in place. Set = target/instantiate that class, e.g. `X2AbilityMultiTarget_Radius`. Bare names are auto-prefixed with `XComGame.`. | -| `CustomProperties` | `array` | Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors. | - -Editor dispatch order (first match wins): `X2AbilityMultiTarget_Cone` → `X2AbilityMultiTarget_Cylinder` → `X2AbilityMultiTarget_AllUnits` → `X2AbilityMultiTarget_ClaymoreRadius` → `X2AbilityMultiTarget_Radius` → `X2AbilityMultiTarget_Line` → `X2AbilityMultiTarget_BurstFire` → any other class - -Shared fields (available for **every** class of this family): - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `AllowSameTarget` | `bool` | `SetAllowSameTarget=true` | `bAllowSameTarget` | | -| `UseSourceWeaponLocation` | `bool` | `SetUseSourceWeaponLocation=true` | `bUseSourceWeaponLocation` | | -| `NumTargetsRequired` | `int` | `SetNumTargetsRequired=true` | `NumTargetsRequired` | | - -#### `X2AbilityMultiTarget_Cone` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ConeEndDiameter` | `float` | `SetConeEndDiameter=true` | `ConeEndDiameter` | | -| `ConeLength` | `float` | `SetConeLength=true` | `ConeLength` | | -| `UseWeaponRangeForLength` | `bool` | `SetUseWeaponRangeForLength=true` | `bUseWeaponRangeForLength` | | -| `LockShooterZ` | `bool` | `SetLockShooterZ=true` | `bLockShooterZ` | | -| `AbilityBonusCones` | `array` | `AbilityBonusConesMode` | `AbilityBonusCones` | | -| `UseWeaponRadius` | `bool` | `SetUseWeaponRadius=true` | `bUseWeaponRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `UseWeaponBlockingCoverFlag` | `bool` | `SetUseWeaponBlockingCoverFlag=true` | `bUseWeaponBlockingCoverFlag` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `IgnoreBlockingCover` | `bool` | `SetIgnoreBlockingCover=true` | `bIgnoreBlockingCover` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `TargetRadius` | `float` | `SetTargetRadius=true` | `fTargetRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `TargetCoveragePercentage` | `float` | `SetTargetCoveragePercentage=true` | `fTargetCoveragePercentage` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AddPrimaryTargetAsMultiTarget` | `bool` | `SetAddPrimaryTargetAsMultiTarget=true` | `bAddPrimaryTargetAsMultiTarget` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AllowDeadMultiTargetUnits` | `bool` | `SetAllowDeadMultiTargetUnits=true` | `bAllowDeadMultiTargetUnits` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `ExcludeSelfAsTargetIfWithinRadius` | `bool` | `SetExcludeSelfAsTargetIfWithinRadius=true` | `bExcludeSelfAsTargetIfWithinRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AbilityBonusRadii` | `array` | `AbilityBonusRadiiMode` | `AbilityBonusRadii` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | - -#### `X2AbilityMultiTarget_Cylinder` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `TargetHeight` | `float` | `SetTargetHeight=true` | `fTargetHeight` | | -| `UseOnlyGroundTiles` | `bool` | `SetUseOnlyGroundTiles=true` | `bUseOnlyGroundTiles` | | -| `UseWeaponRadius` | `bool` | `SetUseWeaponRadius=true` | `bUseWeaponRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `UseWeaponBlockingCoverFlag` | `bool` | `SetUseWeaponBlockingCoverFlag=true` | `bUseWeaponBlockingCoverFlag` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `IgnoreBlockingCover` | `bool` | `SetIgnoreBlockingCover=true` | `bIgnoreBlockingCover` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `TargetRadius` | `float` | `SetTargetRadius=true` | `fTargetRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `TargetCoveragePercentage` | `float` | `SetTargetCoveragePercentage=true` | `fTargetCoveragePercentage` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AddPrimaryTargetAsMultiTarget` | `bool` | `SetAddPrimaryTargetAsMultiTarget=true` | `bAddPrimaryTargetAsMultiTarget` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AllowDeadMultiTargetUnits` | `bool` | `SetAllowDeadMultiTargetUnits=true` | `bAllowDeadMultiTargetUnits` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `ExcludeSelfAsTargetIfWithinRadius` | `bool` | `SetExcludeSelfAsTargetIfWithinRadius=true` | `bExcludeSelfAsTargetIfWithinRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AbilityBonusRadii` | `array` | `AbilityBonusRadiiMode` | `AbilityBonusRadii` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | - -#### `X2AbilityMultiTarget_AllUnits` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `OnlyAllyOfType` | `name` | `SetOnlyAllyOfType=true` | `OnlyAllyOfType` | | -| `AcceptFriendlyUnits` | `bool` | `SetAcceptFriendlyUnits=true` | `bAcceptFriendlyUnits` | | -| `AcceptEnemyUnits` | `bool` | `SetAcceptEnemyUnits=true` | `bAcceptEnemyUnits` | | -| `OnlyAcceptRoboticUnits` | `bool` | `SetOnlyAcceptRoboticUnits=true` | `bOnlyAcceptRoboticUnits` | | -| `OnlyAcceptAlienUnits` | `bool` | `SetOnlyAcceptAlienUnits=true` | `bOnlyAcceptAlienUnits` | | -| `OnlyAcceptAdventUnits` | `bool` | `SetOnlyAcceptAdventUnits=true` | `bOnlyAcceptAdventUnits` | | -| `RandomlySelectOne` | `bool` | `SetRandomlySelectOne=true` | `bRandomlySelectOne` | | -| `DontAcceptNeutralUnits` | `bool` | `SetDontAcceptNeutralUnits=true` | `bDontAcceptNeutralUnits` | | -| `RandomChance` | `int` | `SetRandomChance=true` | `RandomChance` | | -| `UseAbilitySourceAsPrimaryTarget` | `bool` | `SetUseAbilitySourceAsPrimaryTarget=true` | `bUseAbilitySourceAsPrimaryTarget` | | -| `UseWeaponRadius` | `bool` | `SetUseWeaponRadius=true` | `bUseWeaponRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `UseWeaponBlockingCoverFlag` | `bool` | `SetUseWeaponBlockingCoverFlag=true` | `bUseWeaponBlockingCoverFlag` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `IgnoreBlockingCover` | `bool` | `SetIgnoreBlockingCover=true` | `bIgnoreBlockingCover` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `TargetRadius` | `float` | `SetTargetRadius=true` | `fTargetRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `TargetCoveragePercentage` | `float` | `SetTargetCoveragePercentage=true` | `fTargetCoveragePercentage` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AddPrimaryTargetAsMultiTarget` | `bool` | `SetAddPrimaryTargetAsMultiTarget=true` | `bAddPrimaryTargetAsMultiTarget` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AllowDeadMultiTargetUnits` | `bool` | `SetAllowDeadMultiTargetUnits=true` | `bAllowDeadMultiTargetUnits` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `ExcludeSelfAsTargetIfWithinRadius` | `bool` | `SetExcludeSelfAsTargetIfWithinRadius=true` | `bExcludeSelfAsTargetIfWithinRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AbilityBonusRadii` | `array` | `AbilityBonusRadiiMode` | `AbilityBonusRadii` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | - -#### `X2AbilityMultiTarget_ClaymoreRadius` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ClaymoreEnvironmentalDamage` | `int` | `SetClaymoreEnvironmentalDamage=true` | `ClaymoreEnvironmentalDamage` | | -| `UseWeaponRadius` | `bool` | `SetUseWeaponRadius=true` | `bUseWeaponRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `UseWeaponBlockingCoverFlag` | `bool` | `SetUseWeaponBlockingCoverFlag=true` | `bUseWeaponBlockingCoverFlag` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `IgnoreBlockingCover` | `bool` | `SetIgnoreBlockingCover=true` | `bIgnoreBlockingCover` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `TargetRadius` | `float` | `SetTargetRadius=true` | `fTargetRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `TargetCoveragePercentage` | `float` | `SetTargetCoveragePercentage=true` | `fTargetCoveragePercentage` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AddPrimaryTargetAsMultiTarget` | `bool` | `SetAddPrimaryTargetAsMultiTarget=true` | `bAddPrimaryTargetAsMultiTarget` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AllowDeadMultiTargetUnits` | `bool` | `SetAllowDeadMultiTargetUnits=true` | `bAllowDeadMultiTargetUnits` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `ExcludeSelfAsTargetIfWithinRadius` | `bool` | `SetExcludeSelfAsTargetIfWithinRadius=true` | `bExcludeSelfAsTargetIfWithinRadius` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | -| `AbilityBonusRadii` | `array` | `AbilityBonusRadiiMode` | `AbilityBonusRadii` | *(shared — from `X2AbilityMultiTargetStyleEditor_Radius`)* | - -#### `X2AbilityMultiTarget_Radius` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `UseWeaponRadius` | `bool` | `SetUseWeaponRadius=true` | `bUseWeaponRadius` | | -| `UseWeaponBlockingCoverFlag` | `bool` | `SetUseWeaponBlockingCoverFlag=true` | `bUseWeaponBlockingCoverFlag` | | -| `IgnoreBlockingCover` | `bool` | `SetIgnoreBlockingCover=true` | `bIgnoreBlockingCover` | | -| `TargetRadius` | `float` | `SetTargetRadius=true` | `fTargetRadius` | | -| `TargetCoveragePercentage` | `float` | `SetTargetCoveragePercentage=true` | `fTargetCoveragePercentage` | | -| `AddPrimaryTargetAsMultiTarget` | `bool` | `SetAddPrimaryTargetAsMultiTarget=true` | `bAddPrimaryTargetAsMultiTarget` | | -| `AllowDeadMultiTargetUnits` | `bool` | `SetAllowDeadMultiTargetUnits=true` | `bAllowDeadMultiTargetUnits` | | -| `ExcludeSelfAsTargetIfWithinRadius` | `bool` | `SetExcludeSelfAsTargetIfWithinRadius=true` | `bExcludeSelfAsTargetIfWithinRadius` | | -| `AbilityBonusRadii` | `array` | `AbilityBonusRadiiMode` | `AbilityBonusRadii` | | - -#### `X2AbilityMultiTarget_Line` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `TileWidthExtension` | `int` | `SetTileWidthExtension=true` | `TileWidthExtension` | | -| `SightRangeLimited` | `bool` | `SetSightRangeLimited=true` | `bSightRangeLimited` | | -| `AbilityBonusWidths` | `array` | `AbilityBonusWidthsMode` | `AbilityBonusWidths` | | - -#### `X2AbilityMultiTarget_BurstFire` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `NumExtraShots` | `int` | `SetNumExtraShots=true` | `NumExtraShots` | | - -#### Any other class - -Handled by `X2AbilityMultiTargetStyleEditor_Base`: only the shared fields above apply. - -### Triggers (`Triggers`) - -Edits the `AbilityTriggers` array of the template. The trigger of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`. **Caveat:** adding a *new* `X2AbilityTrigger_EventListener` from config is rarely useful — its `ListenerData.EventFn` delegate can only be assigned in code and stays `none`. Editing an existing listener trigger preserves its `EventFn`. `X2AbilityTrigger_OnAbilityActivated` is handled by the EventListener editor (its `MatchAbilityActivated` field is protected and cannot be set). See also `AbilityEventListenerEdits` in the template fields for the separate `Template.AbilityEventListeners` array. - -Structural fields: - -| Config key | Type | Notes | -|---|---|---| -| `Class` | `string` | Trigger class to target/instantiate, e.g. `X2AbilityTrigger_UnitPostBeginPlay`. Bare names are auto-prefixed with `XComGame.`. | -| `Mode` | `EArrayEditMode` | Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes). | -| `CustomProperties` | `array` | Free-form key/value pairs for bridge-mod editors; ignored by the built-in editors. | - -Editor dispatch order (first match wins): `X2AbilityTrigger_UnitPostBeginPlay` → `X2AbilityTrigger_EventListener` → `X2AbilityTrigger_Event` → any other class - -#### `X2AbilityTrigger_UnitPostBeginPlay` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `Priority` | `int` | `SetPriority=true` | `Priority` | | - -#### `X2AbilityTrigger_EventListener` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `ListenerEventID` | `name` | `SetListenerEventID=true` | `ListenerData.EventID` | | -| `ListenerDeferral` | `EventListenerDeferral` | `SetListenerDeferral=true` | `ListenerData.Deferral` | | -| `ListenerFilter` | `AbilityEventFilter` | `SetListenerFilter=true` | `ListenerData.Filter` | | -| `ListenerPriority` | `int` | `SetListenerPriority=true` | `ListenerData.Priority` | | - -#### `X2AbilityTrigger_Event` - -| Config key | Type | Requires | Game field | Notes | -|---|---|---|---|---| -| `MethodName` | `name` | `SetMethodName=true` | `MethodName` | | -| `EventObserverClass` | `string` | `SetEventObserverClass=true` | | | - -Not editable via config: `EventObserverClass` *(class reference)* - -#### Any other class - -Handled by `X2AbilityTriggerEditor_Base`: only the shared fields above apply. - -### Nested structs - -#### `AdditionalCooldownEdit` - -| Config key | Type | Requires | Notes | -|---|---|---|---| -| `AbilityName` | `name` | — | Ability whose cooldown entry is added/updated in `AditionalAbilityCooldowns`. | -| `NumTurns` | `int` | `SetNumTurns=true` | | -| `UseAbilityCooldownNumTurns` | `bool` | `SetUseAbilityCooldownNumTurns=true` | | -| `ApplyCooldownType` | `name` | — | `AdditionalCooldown_ApplyLarger` or `AdditionalCooldown_ApplySmaller`. Applied when non-empty. | - -#### `BonusChargeEdit` - -| Config key | Type | Requires | Notes | -|---|---|---|---| -| `AbilityName` | `name` | — | Ability that grants the bonus charges. | -| `NumCharges` | `int` | `SetNumCharges=true` | | - -#### `StatChangeEdit` - -| Config key | Type | Requires | Notes | -|---|---|---|---| -| `StatType` | `ECharStatType` | `SetStatType=true` | | -| `StatAmount` | `float` | `SetStatAmount=true` | | -| `ModOp` | `EStatModOp` | `SetModOp=true` | | -| `ApplicationRule` | `ECharStatModApplicationRule` | `SetApplicationRule=true` | | - -#### `WeaponDamageValueEdit` - -| Config key | Type | Requires | Notes | -|---|---|---|---| -| `Damage` | `int` | `SetDamage=true` | | -| `Spread` | `int` | `SetSpread=true` | | -| `PlusOne` | `int` | `SetPlusOne=true` | | -| `Crit` | `int` | `SetCrit=true` | | -| `Pierce` | `int` | `SetPierce=true` | | -| `Rupture` | `int` | `SetRupture=true` | | -| `Shred` | `int` | `SetShred=true` | | -| `Tag` | `name` | `SetTag=true` | | -| `DamageType` | `name` | `SetDamageType=true` | | - -#### `AbilityEventListenerEdit` - -| Config key | Type | Requires | Notes | -|---|---|---|---| -| `EventID` | `name` | — | Matches the existing `Template.AbilityEventListeners` entry to edit. Entries cannot be added (their `EventFn` delegate is code-only). | -| `Deferral` | `EventListenerDeferral` | `SetDeferral=true` | | -| `Filter` | `AbilityEventFilter` | `SetFilter=true` | | -| `Priority` | `int` | `SetPriority=true` | | - -#### `AECustomProperty` - -| Config key | Type | Requires | Notes | -|---|---|---|---| -| `Key` | `name` | — | | -| `Value` | `string` | — | | - - -## Examples - -**Slash no longer ends the turn (for soldiers with Blademaster), gets 5 charges and a 5-turn cooldown that also puts Blademaster on a 3-turn cooldown:** - -```ini -[AbilityEditor.X2DLCInfo_AbilityEditor] -+AbilityEdits=( \\ - Ability=SwordSlice, \\ - Costs=( \\ - ( \\ - Class="X2AbilityCost_ActionPoints", \\ - SetNumPoints=true, \\ - NumPoints=1, \\ - SetConsumeAllPoints=true, \\ - ConsumeAllPoints=true, \\ - DoNotConsumeAllSoldierAbilities=(Blademaster) \\ - ), \\ - ( \\ - Class="X2AbilityCost_Charges", \\ - SetNumCharges=true, \\ - NumCharges=1 \\ - ) \\ - ), \\ - Charges=( \\ - Class="X2AbilityCharges", \\ - SetInitialCharges=true, \\ - InitialCharges=5 \\ - ), \\ - Cooldown=( \\ - Class="X2AbilityCooldown", \\ - SetNumTurns=true, \\ - NumTurns=5, \\ - AdditionalCooldowns=( \\ - ( \\ - AbilityName=Blademaster, \\ - SetNumTurns=true, \\ - NumTurns=3 \\ - ) \\ - ) \\ - ) \\ -) -``` - -Note that both `Costs` entries are listed: since the default `CostMode` is `eACEM_ReplaceAll`, the ability ends up with exactly the costs written here. - -**Aid Protocol on a 9-turn cooldown for XCOM, 1 turn for the AI:** - -```ini -+AbilityEdits=( \\ - Ability=AidProtocol, \\ - Cooldown=( \\ - Class="XComGame.X2AbilityCooldown_PerPlayerType", \\ - SetNumTurns=true, \\ - NumTurns=9, \\ - SetNumTurnsForAI=true, \\ - NumTurnsForAI=1 \\ - ) \\ -) -``` - -**Add a cost to an ability without touching its other costs** — set `CostMode` away from the default and use `Mode=eACEM_AddOnly` on the entry: - -```ini -+AbilityEdits=( \\ - Ability=ScanningProtocol, \\ - CostMode=eACEM_Merge, \\ - Costs=( \\ - ( \\ - Class="X2AbilityCost_Charges", \\ - Mode=eACEM_AddOnly, \\ - SetNumCharges=true, \\ - NumCharges=1 \\ - ) \\ - ) \\ -) -``` - -**Edit an effect and its conditions** — make Combat Protocol's damage effect deal 3 guaranteed damage, and restrict the ability to robotic targets only: - -```ini -+AbilityEdits=( \\ - Ability=CombatProtocol, \\ - Effects=( \\ - ( \\ - Class="X2Effect_ApplyWeaponDamage", \\ - Slot=eAES_Target, \\ - Mode=eAEM_Merge, \\ - WeaponDamageValue=( \\ - SetDamage=true, \\ - Damage=3, \\ - SetSpread=true, \\ - Spread=0 \\ - ) \\ - ) \\ - ), \\ - TargetConditions=( \\ - ( \\ - Class="X2Condition_UnitProperty", \\ - Mode=eAEM_Merge, \\ - SetExcludeOrganic=true, \\ - ExcludeOrganic=true \\ - ) \\ - ) \\ -) -``` - -The template-level `TargetConditions` edits the condition of class `X2Condition_UnitProperty` **in place** if the ability already has one (only the fields you `Set` change), or adds a new one otherwise. - -**Tweak aim and targeting** — give an ability +15 built-in aim (editing its existing to-hit calc in place, no `Class` needed) and widen its cone: - -```ini -+AbilityEdits=( \\ - Ability=SomeConeAbility, \\ - ToHitCalc=( \\ - SetBuiltInHitMod=true, \\ - BuiltInHitMod=15 \\ - ), \\ - MultiTargetStyle=( \\ - SetConeEndDiameter=true, \\ - ConeEndDiameter=20.0, \\ - SetConeLength=true, \\ - ConeLength=28.0 \\ - ) \\ -) -``` - -## Extending Ability Editor (bridge mods) - -Other mods can plug their own editor classes into Ability Editor's dispatch — the intended way to support DLC-package or mod-added classes without adding dependencies to Ability Editor itself: - -1. Make your mod depend on the `AbilityEditor` script package (X2ModBuildCommon dependency). -2. Subclass the right family editor and declare which game class you handle: - ```unrealscript - class X2AbilityEffectsEditor_MyDLCEffect extends X2AbilityEffectsEditor_Persistent; - - static function bool CanEdit(X2Effect Effect) - { - return Effect.IsA('X2Effect_MyDLCEffect'); - } - - static function ApplyDerivedEdit(name AbilityName, string Slot, X2Effect Effect, EffectEdit EffectEdit) - { - super.ApplyDerivedEdit(AbilityName, Slot, Effect, EffectEdit); - // read shared EffectEdit fields, or your own values from EffectEdit.CustomProperties - } - ``` -3. Register it in your mod's `XComAbilityEditor.ini`: - ```ini - [AbilityEditor.X2DLCInfo_AbilityEditor] - +ExtraEffectsEditors=(EditorClass="MyMod.X2AbilityEffectsEditor_MyDLCEffect", Priority=10) - ``` - -Registered extras are dispatched **before** all built-in editors, sorted by `Priority` (highest first). Rule of thumb: the more derived your target class, the higher the `Priority` — that way an editor for a child class always wins over one for its parent. Targeting a class Ability Editor already handles deliberately **overrides** the built-in editor. Every `ExtraEditors` array exists for all nine families (`ExtraCostEditors`, `ExtraConditionEditors`, `ExtraToHitCalcEditors`, ...). - -For data the shared edit structs don't carry, every `EffectEdit`/`ConditionEdit`/`ToHitCalcEdit`/`TargetStyleEdit`/`MultiTargetStyleEdit`/`TriggerEdit` has a `CustomProperties` array of `(Key=..., Value="...")` pairs that built-in editors ignore and your editor can interpret freely. - -## Troubleshooting - -- Enable logging in the mod's `XComEngine.ini` (or your own config): section `[AbilityEditor.X2DLCInfo_AbilityEditor]`, `EnableDebug=true`. Every applied change is logged to `Launch.log` under the `AbilityEditor` tag as ` changed from to `; unknown abilities and classes are reported too. -- Nothing happens? Check that every value has its `SetX=true` switch, that `Cooldown`/`Charges` blocks include `Class=`, and that the `\\` line continuations are intact. -- Config changes require deleting the config cache (or starting with `-regenerateconfig`... in practice: delete `Documents\My Games\XCOM2 War of the Chosen\XComGame\Config`) for the game to pick them up. - -## For developers - -### Build prerequisite: Community Highlander sources - -**Building this mod requires an SDK whose `Development/Src` is Community Highlander-patched.** It is -not a requirement for *players* — see below. - -`X2AbilityEffectsEditor_Helper.uc` writes `Template.AbilityTargetEffects`, -`AbilityMultiTargetEffects` and `AbilityShooterEffects`. In stock Firaxis sources those three are -`protectedwrite`, so the writes will not compile. Community Highlander -[Issue #68](https://github.com/X2CommunityCore/X2WOTCCommunityHighlander/issues/68) removes that -modifier (`X2AbilityTemplate.uc`, "Start Issue #68 / End Issue #68"). - -This is a **compile-time** dependency only. Issue #68 changes nothing but the accessibility -modifier — same types, same declaration order, same class layout — and UnrealScript access -modifiers do not affect the compiled property layout, so the resulting `.u` loads and runs against -vanilla `XComGame` as well as the Highlander's. No `RequiredHighlanderVersion` is declared, and none -is needed. - -If you see `Error, Can't write to protected variable` on `AbilityTargetEffects` during a build, your -SDK sources are stock; deploy the Highlander into the SDK. - -### Regenerating the docs - -The [Reference](#reference), [Supported at a glance](#supported-at-a-glance) and [Edit modes](#edit-modes) sections above are **generated** from the UnrealScript sources. After adding or changing an editor class, regenerate them with: +To preview the site locally: ```powershell -.\.scripts\generate-docs.ps1 -SdkPath '' # updates README.md and docs/schema.json -.\.scripts\generate-docs.ps1 -CheckOnly # exits 1 if the docs are stale -.\.scripts\generate-docs.ps1 -PrintSourceHash # prints the .uc source hash and exits +python -m venv .venv +.\.venv\Scripts\Activate.ps1 +pip install -r requirements-docs.txt +mkdocs serve ``` -Always pass `-SdkPath`: without it the generator silently skips abstract-class badges, the -per-class "not editable via config" lists, and the **dispatch-order check** — the only automated -guard against registering an editor after one of its game class's ancestors, which makes it dead -code. `-PrintSourceHash` is the CI-friendly staleness check: it needs no SDK, so CI can compare it -against `sourceHash` in the committed `docs/schema.json`. - -The script also emits [`docs/schema.json`](docs/schema.json), a machine-readable description of the whole config API (enums, structs, families, editors, fields), meant to be consumed by external tooling such as a config-builder web app. - -For the docs to pick up a new editor class automatically, follow the existing conventions: - -1. Declare the handled game class with a single `IsA('X2Thing_Class')` in `CanEdit()`. -2. Apply optional scalars with the `if (Edit.SetX) { LogInfo(...); Target.Field = Edit.X; }` triplet, and name arrays through `X2AbilityEditor_Helper.ApplyNameArrayEdit`. -3. Register the class in the family's registry in `X2DLCInfo_AbilityEditor.uc` `defaultproperties` — **before** any editor whose game class is a parent of yours (first match wins). -4. Declare new config fields in `AE_DataStructures.uc` as `Set`/value pairs. To document a field, put the `// comment` **directly above the value var, not above the `Set` guard** — the parser attaches a comment to the next `var` it sees, and guards are not documented fields, so a comment above the pair is dropped. Comments above a guard are therefore free to act as section headers (`// X2Condition_UnitValue`), which is how the file already uses them. - - ```unrealscript - var bool SetNumAmmo; - // Rounds consumed per shot. 0 makes the ability free to fire. - var int NumAmmo; - ``` +## Links -Everything hand-written in this file lives outside the `` markers and survives regeneration. +- [Changelog](CHANGELOG.md) +- [Legacy 1.x config](https://boundir.github.io/AbilityEditor/guides/legacy-1x/) - still supported, superseded by the 2.0 format. diff --git a/docs/contributing/adding-an-editor.md b/docs/contributing/adding-an-editor.md new file mode 100644 index 0000000..2d9f9cd --- /dev/null +++ b/docs/contributing/adding-an-editor.md @@ -0,0 +1,161 @@ +# Adding an editor + +This page is for people working on Ability Editor itself. To extend it *from another mod* without +forking, see [Bridge mods](../guides/bridge-mods.md) instead. + +## Build prerequisite: Community Highlander sources + +**Building this mod may require changes to the SDK to unprotect properties. Or simply have `Development/SrcOrig` up to date with Community Highlander-patched.**. It is not a requirement for players. + +`X2AbilityEffectsEditor_Helper.uc` writes `Template.AbilityTargetEffects`, +`AbilityMultiTargetEffects` and `AbilityShooterEffects`. In stock Firaxis sources those three are +`protectedwrite`, so the writes will not compile. Community Highlander +[Issue #68](https://github.com/X2CommunityCore/X2WOTCCommunityHighlander/issues/68) removes that +modifier. + +This is a compile-time dependency only. The issue changes nothing but the accessibility modifier - +same types, same declaration order, same class layout - and UnrealScript access modifiers do not +affect the compiled property layout, so the resulting `.u` runs against vanilla `XComGame` too. + +If a build fails with `Can't write to protected variable` on `AbilityTargetEffects`, your SDK +sources are stock; either unprotect the variable or deploy the Highlander into the SDK. + +## The four places + +Adding support for a game class means touching four things. Three of them fail *silently* if +forgotten - no compile error, just an edit that does nothing or a field missing from these docs. + +### 1. The editor class + +`AbilityEditor/Src/AbilityEditor/Classes/X2AbilityEditor_.uc` + +```unrealscript +class X2AbilityEffectsEditor_Achilles extends X2AbilityEffectsEditor_Persistent; + +static function bool CanEdit(X2Effect Effect) +{ + return Effect.IsA('X2Effect_Achilles'); +} + +static function ApplyDerivedEdit( + name AbilityName, + string Slot, + X2Effect Effect, + EffectEdit EffectEdit +) +{ + local X2Effect_Achilles AchillesFX; + + super.ApplyDerivedEdit(AbilityName, Slot, Effect, EffectEdit); + + AchillesFX = X2Effect_Achilles(Effect); + + if (AchillesFX == none) + { + return; + } + + if (EffectEdit.SetToHitMin) + { + class'X2AbilityEditor_Logger'.static.LogInfo( + AbilityName, + Slot $ ".ToHitMin", + string(AchillesFX.ToHitMin), + string(EffectEdit.ToHitMin) + ); + + AchillesFX.ToHitMin = EffectEdit.ToHitMin; + } +} +``` + +Four things carry weight: + +- **Extend the editor of the game class's nearest ancestor.** The editor hierarchy mirrors the + game inheritance. +- **`CanEdit` names exactly one game class** via `IsA`. The doc generator reads that string; a + `CanEdit` that checks two classes, or uses something other than `IsA`, makes the editor invisible + to these pages. +- **`super.ApplyDerivedEdit(...)` first**, whenever the parent is not the family root. +- **One `if (Edit.SetX)` block per field**, logging before assigning. + +### 2. The config struct + +Add the pair to the family's struct in `AE_DataStructures.uc`: + +```unrealscript +var bool SetToHitMin; +// Minimum to-hit chance this effect will allow, as a percentage. +var int ToHitMin; +``` + +!!! important "Where the `//` comment goes" + Put the description **directly above the value var, not above the `Set` guard**. The parser + attaches a comment to the next `var` it sees, and guards are not documented fields - so a + comment above the pair is dropped. + + Comments above a guard are therefore free to act as section headers (`// X2Condition_UnitValue`). + +Because inheritance is flattened in the schema, **one comment can document dozens of rendered +rows**. See [Documentation coverage](doc-coverage.md) for which keys are worth writing next. + +### 3. The registry - the step that silently breaks things + +Add the class to `defaultproperties` in `X2DLCInfo_AbilityEditor.uc`. + +Dispatch is **first match wins**, scanning in index order. Because `CanEdit` uses `IsA` - true for +subclasses too - an editor registered *after* one of its game-class ancestors never runs. The +ancestor claims the object first. + +**Every editor must appear before the editor of any game class it derives from.** The family's +`_Base` catch-all returns `true` unconditionally and is always last. + +Nothing enforces this at compile time. The generator detects it, but only with `-SdkPath`. + +### 4. Regenerate + +```powershell +.\.scripts\generate-docs.ps1 -SdkPath '' +``` + +Read the warnings as text, not just the exit code: + +- **`Orphan config field: .`** - you added the struct field but the editor doesn't + read it, or reads it in a shape the parser can't see. This is the exact symptom of steps 1 and 2 + being out of sync. +- **`Dispatch order (): X is registered after Y`** - step 3 is wrong. + +Then confirm your field appears in `docs/schema.json`. Review that file rather than the README +diff. + +## Check the field is real before promising it + +Read the game class in the SDK and confirm the field exists *and* is settable. Four things +routinely aren't: + +- **The field doesn't exist.** `X2Effect_Burning` sounds like it should have damage-per-tick; it + has exactly one var, and that isn't it. Its damage lives in a nested `X2Effect_ApplyWeaponDamage` + at `ApplyOnTick[0]`. +- **The field is read via `default.X`, not the instance.** An editor writes the template's copy, + the game reads the class default, and nothing happens. +- **The concept isn't on the template at all** - native code, or `XComGameCore.ini` config. + +## Docs pipeline + +`.scripts/generate-docs.ps1` parses the UnrealScript sources into `docs/schema.json`. This site is +rendered from that file by `scripts/gen_reference.py` at build time; generated pages are never +committed. + +```powershell +.\.scripts\generate-docs.ps1 -CheckOnly # exits 1 if schema or README are stale +.\.scripts\generate-docs.ps1 -PrintSourceHash # hash of the .uc sources; needs no SDK +``` + +To preview the site: + +```powershell +python -m venv .venv +.\.venv\Scripts\Activate.ps1 +pip install -r requirements-docs.txt +mkdocs serve +``` diff --git a/docs/getting-started/config-syntax.md b/docs/getting-started/config-syntax.md new file mode 100644 index 0000000..e268cb6 --- /dev/null +++ b/docs/getting-started/config-syntax.md @@ -0,0 +1,124 @@ +# Config syntax + +At game start (`OnPostTemplatesCreated`), the mod reads every `+AbilityEdits=(...)` entry from the +`[AbilityEditor.X2DLCInfo_AbilityEditor]` section of `XComAbilityEditor.ini`, finds the ability +template named by `Ability`, and applies your edits to it. + +## Anatomy of an entry + +```ini +[AbilityEditor.X2DLCInfo_AbilityEditor] ++AbilityEdits=( \\ + Ability=CombatProtocol, \\ + Effects=( \\ + ( \\ + Class="X2Effect_ApplyWeaponDamage", \\ + Slot=eAES_Target, \\ + Mode=eAEM_Merge, \\ + WeaponDamageValue=(SetDamage=true, Damage=3) \\ + ) \\ + ) \\ +) +``` + +`Ability` is the only required key. Everything else is optional, and anything you leave out keeps +its current value. + +## Line continuation + +End each line of a multi-line entry with ` \\` - a space followed by **two** backslash characters. +Nothing may follow it on the line. *The space is optional and only contributes to style points* + +A broken continuation doesn't always error. + +## `Set` + value pairs + +Most fields come as a pair: a `SetX=true` switch and the `X=value` itself. **A value without its +`Set` switch is ignored.** + +```ini +SetNumTurns=true, NumTurns=5 ; applied +NumTurns=5 ; silently ignored +``` + +This is how the mod distinguishes "you asked for 0" from "you didn't ask". `0`, `false` and `""` +are all legitimate values, so absence cannot be inferred from the value alone. + +Forgetting the guard produces no warning. If an edit seems inert, check for a missing `Set` first. + +## Arrays and modes + +Array-shaped fields take a companion `...Mode` that says how your list combines with the existing +one. + +```ini +AdditionalAbilities=(Blademaster, Bladestorm), \\ +AdditionalAbilitiesMode=eNAEM_Merge +``` + +Omitting the mode is *not* neutral - see [Edit modes](edit-modes.md). Every mode enum's default is +a Replace. + +## Naming a `Class` + +Class names without a package prefix are assumed to be base game, so +`X2AbilityCost_ActionPoints` resolves to `XComGame.X2AbilityCost_ActionPoints`. To target another +mod's class, qualify it: + +```ini +Class="MyModPackage.X2AbilityCost_Custom" +``` + +An unresolvable class is logged and that block is skipped; the rest of the entry still applies. + +For each `Class` the mod picks the most specific editor it has (the family pages list the +[dispatch order](../reference/index.md)). A class with no dedicated editor still gets its family's +shared fields. + +## Quoting + +| Kind | Written as | Example | +|---|---|---| +| `string` | double-quoted | `Class="X2Effect_Persistent"` | +| `name` | bare, unquoted | `Ability=SwordSlice` | +| `bool` | bare | `SetNumPoints=true` | +| `float` | with a decimal point | `ConeLength=28.0` | +| `array` | parenthesised, comma-separated, unquoted | `DoNotConsumeAllSoldierAbilities=(Blademaster)` | +| array of structs | outer parenthesis, inner parenthesis per element | `Costs=( ( ... ), ( ... ) )` | + +## Edit in place vs replace + +Everything edits existing objects **in place** where it can. + +For the single-object slots - `Cooldown`, `Charges`, `ToHitCalc`, `ToHitOwnerOnMissCalc`, +`TargetStyle`, `MultiTargetStyle` - the presence of `Class` changes what the block means: + +| `Class` | Behaviour | +|---|---| +| omitted | Edit whatever object is there. **No-op if the ability has none**, silently. | +| set, matches the existing class | Edit in place. | +| set, differs from the existing class | **Replace** with a fresh instance - every field you did not `Set` reverts to that class's defaults, not the ability's old values. | + +That last row is worth re-reading before swapping a class: unset fields do not carry over. + +For the array families (`Costs`, `Effects`, `Triggers`, the condition arrays), entries are matched +by **exact class equality**, not by inheritance. You cannot target the second +`X2Effect_ApplyWeaponDamage` on an ability, and naming a *subclass* of what the ability actually +has will add a new object rather than edit the existing one. + +## Where conditions can go + +`ConditionEdit` blocks are accepted in seven places - three on the entry itself, four inside an +`Effects` entry: + +| Location | Slot | +|---|---| +| `+AbilityEdits` | `ShooterConditions` | +| `+AbilityEdits` | `TargetConditions` | +| `+AbilityEdits` | `MultiTargetConditions` | +| `Effects` entry | `TargetConditions` | +| `Effects` entry | `ApplyDamageModConditions` *(only on `X2Effect_ConditionalDamageModifier`)* | +| `Effects` entry | `LethalDamageConditions` *(only on `X2Effect_LethalWeaponDamage`)* | +| `Effects` entry | `ToHitConditions` *(only on `X2Effect_ToHitModifier`)* | + +It is the same block in all seven - see [Conditions](../reference/conditions/index.md). diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md new file mode 100644 index 0000000..b5a674e --- /dev/null +++ b/docs/getting-started/installation.md @@ -0,0 +1,51 @@ +# Installation + +## Get the mod + +Subscribe on the Steam Workshop, or drop the mod folder into your +`XCOM 2/XCom2-WarOfTheChosen/Mods/` directory and enable it in the launcher. + +Ability Editor has no dependencies for players. It does not replace any game class, so it coexists +with overhaul mods - though what it can reach depends on load order when another mod rewrites the +same templates. See [Troubleshooting](../guides/troubleshooting.md#load-order). + +## Where your config goes + +Edits live under the `[AbilityEditor.X2DLCInfo_AbilityEditor]` section of `XComAbilityEditor.ini`. + +You have two reasonable places to put them: + +**In Ability Editor's own config** - fine for personal tweaks, but a Workshop update can overwrite it: + +``` +.../Mods/AbilityEditor/Config/XComAbilityEditor.ini +``` + +**In your own mod** - the right home for anything you want to keep or share. Create a tiny mod with +just a `Config/XComAbilityEditor.ini` containing the same section header and your `+AbilityEdits` +entries. The `+` prefix appends to Ability Editor's list rather than replacing it, so several mods +can contribute edits at once. + +## Check it is working + +Turn on logging - in `XComEngine.ini`, under the same section: + +```ini +[AbilityEditor.X2DLCInfo_AbilityEditor] +EnableDebug=true +``` + +Every applied change is then written to `Launch.log` under the `AbilityEditor` tag, as: + +``` + changed from to +``` + +Unresolvable ability names and class names are reported there too. If a field you expected is +absent from the log, it was never applied - start with +[Troubleshooting](../guides/troubleshooting.md). + +## Next + +- [Config syntax](config-syntax.md) - how an entry is structured. +- [Examples](../guides/examples.md) - worked entries you can paste and adapt. diff --git a/docs/guides/bridge-mods.md b/docs/guides/bridge-mods.md new file mode 100644 index 0000000..4703d16 --- /dev/null +++ b/docs/guides/bridge-mods.md @@ -0,0 +1,94 @@ +# Extending Ability Editor (bridge mods) + +Other mods can plug their own editor classes into Ability Editor's dispatch. This is the intended +way to support DLC-package or mod-added game classes without adding dependencies to Ability Editor +itself. + +## Three steps + +**1. Depend on the `AbilityEditor` script package** + +**2. Subclass the right family editor** and declare which game class you handle: + +```unrealscript +class X2AbilityEffectsEditor_MyDLCEffect extends X2AbilityEffectsEditor_Persistent; + +static function bool CanEdit(X2Effect Effect) +{ + return Effect.IsA('X2Effect_MyDLCEffect'); +} + +static function ApplyDerivedEdit(name AbilityName, string Slot, X2Effect Effect, EffectEdit EffectEdit) +{ + super.ApplyDerivedEdit(AbilityName, Slot, Effect, EffectEdit); + // read shared EffectEdit fields, or your own values from EffectEdit.CustomProperties +} +``` + +Extend the editor for your game class's **nearest ancestor**, and call `super.ApplyDerivedEdit` +first - that is what gets the inherited fields applied. + +!!! warning "Signatures differ by family" + Six families pass a `Slot` string. **Cost, Cooldown and Charges do not** - their signature is + `(name AbilityName, X2AbilityCost AbilityCost, CostEdit CostEdit)` and they build the log path + from a literal instead. + +**3. Register it from your own mod's `XComAbilityEditor.ini`:** + +```ini +[AbilityEditor.X2DLCInfo_AbilityEditor] ++ExtraEffectsEditors=(EditorClass="MyMod.X2AbilityEffectsEditor_MyDLCEffect", Priority=10) +``` + +An `ExtraEditors` array exists for all nine families - `ExtraCostEditors`, +`ExtraConditionEditors`, `ExtraToHitCalcEditors`, and so on. + +## Dispatch and priority + +Registered extras are dispatched **before** every built-in editor, sorted by `Priority` (highest +first). Because the whole extras list is checked before any built-in, the built-in catch-all cannot +steal your class - `Priority` only orders extras against each other. + +Rule of thumb: the more derived your target class, the higher the `Priority`, so an editor for a +child class always wins over one for its parent. Targeting a class Ability Editor already handles +deliberately **overrides** the built-in editor. + +Classes are resolved with `DynamicLoadObject` at `OnPostTemplatesCreated` time. A class that fails +to load is logged and skipped, not fatal. + +## Passing your own data + +The shared edit structs only carry fields Ability Editor knows about. For anything else, +`EffectEdit`, `ConditionEdit`, `ToHitCalcEdit`, `TargetStyleEdit`, `MultiTargetStyleEdit` and +`TriggerEdit` each have a `CustomProperties` array of `(Key=..., Value="...")` pairs that built-in +editors ignore and yours can interpret freely. + +```ini ++AbilityEdits=( \\ + Ability=MyAbility, \\ + Effects=( \\ + ( \\ + Class="MyMod.X2Effect_MyDLCEffect", \\ + Mode=eAEM_Merge, \\ + CustomProperties=( (Key=Intensity, Value="3") ) \\ + ) \\ + ) \\ +) +``` + +!!! danger "Cost, Cooldown and Charges have no `CustomProperties`" + Only the six `Slot`-taking structs carry it. `CostEdit`, `CooldownEdit` and `ChargesEdit` do + not, so a bridge **cost** editor has no config channel for custom fields at all. + + Two workable routes: have your editor read its own `config` array in your own mod, keyed on + the `AbilityName` that `ApplyEdit` already receives - this works today with no changes to + Ability Editor - or propose adding `CustomProperties` to the struct upstream, which is a + one-line additive change. + +Note there is no `GetCustomProperty` helper in the codebase; every consumer does its own lookup. + +## What your fields won't do + +Bridge-mod fields do not appear in this site or in `schema.json`. Both are generated from Ability +Editor's own sources, and `CustomProperties` is deliberately outside the documented surface. +Document your keys in your own mod's README. diff --git a/docs/guides/examples.md b/docs/guides/examples.md new file mode 100644 index 0000000..9731f51 --- /dev/null +++ b/docs/guides/examples.md @@ -0,0 +1,148 @@ +# Examples + +Worked entries you can paste and adapt. All of them go under +`[AbilityEditor.X2DLCInfo_AbilityEditor]` in `XComAbilityEditor.ini`. + +## Rework Slash + +Slash no longer ends the turn for soldiers with Blademaster, gains 5 charges, and takes a 5-turn +cooldown that also puts Blademaster on a 3-turn cooldown. + +```ini ++AbilityEdits=( \\ + Ability=SwordSlice, \\ + Costs=( \\ + ( \\ + Class="X2AbilityCost_ActionPoints", \\ + SetNumPoints=true, \\ + NumPoints=1, \\ + SetConsumeAllPoints=true, \\ + ConsumeAllPoints=true, \\ + DoNotConsumeAllSoldierAbilities=(Blademaster) \\ + ), \\ + ( \\ + Class="X2AbilityCost_Charges", \\ + SetNumCharges=true, \\ + NumCharges=1 \\ + ) \\ + ), \\ + Charges=( \\ + Class="X2AbilityCharges", \\ + SetInitialCharges=true, \\ + InitialCharges=5 \\ + ), \\ + Cooldown=( \\ + Class="X2AbilityCooldown", \\ + SetNumTurns=true, \\ + NumTurns=5, \\ + AdditionalCooldowns=( \\ + ( \\ + AbilityName=Blademaster, \\ + SetNumTurns=true, \\ + NumTurns=3 \\ + ) \\ + ) \\ + ) \\ +) +``` + +## Split a cooldown between XCOM and the AI + +Aid Protocol on a 9-turn cooldown for the player, 1 turn for the AI. + +```ini ++AbilityEdits=( \\ + Ability=AidProtocol, \\ + Cooldown=( \\ + Class="XComGame.X2AbilityCooldown_PerPlayerType", \\ + SetNumTurns=true, \\ + NumTurns=9, \\ + SetNumTurnsForAI=true, \\ + NumTurnsForAI=1 \\ + ) \\ +) +``` + +Because `Class` names a *different* class than the ability's current cooldown, the cooldown object +is replaced - so every field you care about must be set explicitly. + +## Add a cost without disturbing the others + +Set `CostMode` away from its default and use `Mode=eACEM_AddOnly` on the entry. + +```ini ++AbilityEdits=( \\ + Ability=ScanningProtocol, \\ + CostMode=eACEM_Merge, \\ + Costs=( \\ + ( \\ + Class="X2AbilityCost_Charges", \\ + Mode=eACEM_AddOnly, \\ + SetNumCharges=true, \\ + NumCharges=1 \\ + ) \\ + ) \\ +) +``` + +Both modes are needed. `CostMode=eACEM_Merge` stops the wipe; the per-entry `Mode` also defaults to +`ReplaceAll`, which once the outer mode is Merge would *skip* a cost that isn't already present. + +## Edit an effect and restrict its targets + +Make Combat Protocol's damage effect deal 3 guaranteed damage, and restrict the ability to robotic +targets. + +```ini ++AbilityEdits=( \\ + Ability=CombatProtocol, \\ + Effects=( \\ + ( \\ + Class="X2Effect_ApplyWeaponDamage", \\ + Slot=eAES_Target, \\ + Mode=eAEM_Merge, \\ + WeaponDamageValue=( \\ + SetDamage=true, \\ + Damage=3, \\ + SetSpread=true, \\ + Spread=0 \\ + ) \\ + ) \\ + ), \\ + TargetConditions=( \\ + ( \\ + Class="X2Condition_UnitProperty", \\ + Mode=eAEM_Merge, \\ + SetExcludeOrganic=true, \\ + ExcludeOrganic=true \\ + ) \\ + ) \\ +) +``` + +The template-level `TargetConditions` edits the existing `X2Condition_UnitProperty` **in place** if +the ability has one - changing only the fields you `Set` - and adds a new one otherwise. + +## Tweak aim and targeting shape + +Give an ability +15 built-in aim and widen its cone. No `Class` on either block, so both edit +whatever the ability already has. + +```ini ++AbilityEdits=( \\ + Ability=SomeConeAbility, \\ + ToHitCalc=( \\ + SetBuiltInHitMod=true, \\ + BuiltInHitMod=15 \\ + ), \\ + MultiTargetStyle=( \\ + SetConeEndDiameter=true, \\ + ConeEndDiameter=20.0, \\ + SetConeLength=true, \\ + ConeLength=28.0 \\ + ) \\ +) +``` + +Omitting `Class` means these are no-ops if the ability has no to-hit calc or multi-target style at +all - which is silent. Check the log if nothing changes. diff --git a/docs/guides/legacy-1x.md b/docs/guides/legacy-1x.md new file mode 100644 index 0000000..bdf1bb4 --- /dev/null +++ b/docs/guides/legacy-1x.md @@ -0,0 +1,63 @@ +# The legacy 1.x config + +Ability Editor 1.x used a different, flatter config format. **It still works** - 2.0 runs the old +entries before the new ones. + +If you are writing something new, use [the 2.0 format](../getting-started/config-syntax.md). + +## What it looked like + +Section `[AbilityEditor.OPTC_Abilities]`, key `+Abilities`, one flat struct per ability: + +```ini +[AbilityEditor.OPTC_Abilities] ++Abilities = (AbilityName=SwordSlice, APCost=1, EndsTurn=true, DoNotConsumeAllActionsWith[0]=Blademaster) ++Abilities = (AbilityName=ScanningProtocol, Cooldown=2, Charges=9, FreeAction=true) ++Abilities = (AbilityName=GremlinHeal, Charges=2, BonusChargeWith[0]=(BonusAbilityName=RestorativeMist, NumBonusCharges=3)) +``` + +Fields: `AbilityName`, `ItemSlot`, `RetainConcealment`, `AmmoCost`, `Cooldown`, `APCost`, +`EndsTurn`, `FreeAction`, `ConsumeItem`, `Charges`, `KeepChargeOnMiss`, +`DoNotConsumeAllActionsWith[]`, `DoNotConsumeAllActionsUnderEffects[]`, `SharedAbilityCharges[]`, +`SharedCooldowns[]`, `bCrossClassEligible`, `AddAbility[]`, `BonusChargeWith[]`, +`OverrideAbilities[]`, `PrerequisiteAbilities[]`, `FocusAmount`, `ConsumeAllFocus`, +`GhostOnlyCost`. + +## Why 2.0 replaced it + +!!! danger "1.x is destructive by design" + For every ability it lists, the 1.x code unconditionally clears the ability's costs, charges + and cooldown before rebuilding them from your entry. It also always re-adds an action-point + cost even when you set `APCost=0`. There is no way to change one thing and leave the rest + alone - which is precisely what the 2.0 `Set` guards and `Mode` fields exist to make possible. + +Beyond that, 1.x could only reach costs, charges, cooldowns and a handful of template flags. It had +no access to effects, conditions, to-hit calculation, targeting shape or triggers. + +A few quirks worth knowing if you are reading old config: + +- `bCrossClassEligible` took the *names* `TRUE`/`FALSE`, not booleans. +- `FocusAmount` was a string holding an integer. +- `ItemSlot` and `RetainConcealment` were matched against a hardcoded whitelist; an unrecognised + value silently did nothing. + +## Ordering + +1.x entries are applied **first**, before any `+AbilityEdits`. So if both formats touch the same +ability, the 2.0 entry edits whatever 1.x left behind. Mixing them on one ability is possible but +confusing - pick one. + +## Translating an entry + +| 1.x | 2.0 | +|---|---| +| `APCost=1` | `Costs` => `X2AbilityCost_ActionPoints`, `SetNumPoints=true, NumPoints=1` | +| `EndsTurn=true` | same cost entry, `SetConsumeAllPoints=true, ConsumeAllPoints=true` | +| `FreeAction=true` | same cost entry, `SetFreeCost=true, FreeCost=true` | +| `AmmoCost=3` | `Costs` => `X2AbilityCost_Ammo`, `SetNumAmmo=true, NumAmmo=3` | +| `Cooldown=2` | `Cooldown=(Class="X2AbilityCooldown", SetNumTurns=true, NumTurns=2)` | +| `Charges=9` | `Charges=(Class="X2AbilityCharges", SetInitialCharges=true, InitialCharges=9)` | +| `DoNotConsumeAllActionsWith[0]=X` | `DoNotConsumeAllSoldierAbilities=(X)` on the action-point cost | + +Remember to set `CostMode=eACEM_Merge` when translating, unless you genuinely want the 1.x +replace-everything behaviour. See [Examples](examples.md). diff --git a/docs/guides/troubleshooting.md b/docs/guides/troubleshooting.md new file mode 100644 index 0000000..ef3ee05 --- /dev/null +++ b/docs/guides/troubleshooting.md @@ -0,0 +1,119 @@ +# Troubleshooting + +The mod does not validate your config. Bad entries are logged and skipped at best, and a +**misspelled field name inside a block is silently ignored by the game's `.ini` parser with no log +line at all**. So the order below matters - it goes from most to least common. + +## Turn the log on first + +In `XComEngine.ini`: + +```ini +[AbilityEditor.X2DLCInfo_AbilityEditor] +EnableDebug=true +``` + +Every applied change appears in `Launch.log` under the `AbilityEditor` tag: + +``` +SwordSlice ActionPointCost.iNumPoints changed from 2 to 1 +``` + +**If a field you expected is not in that log, it was never applied.** That single fact resolves +most problems here. + +## Nothing happened at all + +1. **Did you clear the config cache?** Delete + `Documents\My Games\XCOM2 War of the Chosen\XComGame\Config`. XCOM 2 caches config aggressively + and will otherwise keep using the old values. This is the most common cause by a wide margin. +2. **Missing `Set` guard.** `NumPoints=1` on its own does nothing; it needs `SetNumPoints=true` + beside it. See [Config syntax](../getting-started/config-syntax.md#set-value-pairs). +3. **Broken line continuation.** Every line but the last needs a trailing ` \\` with nothing after + it. A broken one truncates the entry silently. +4. **Wrong ability name.** The log says `AbilityEdit: Ability not found: `. Names are + template names, not display names - the counter-attack from Bladestorm is `BladestormAttack`, + not `Bladestorm`, and `Bladestorm` itself is a passive with no costs at all. +5. **Single-object slot with no `Class` on an ability that has none.** A `Cooldown` block without + `Class` edits the existing cooldown; if the ability never had one, the block is a silent no-op. + Name the `Class` to create one. + +## Something changed that I didn't ask for + +Almost always a mode default. **Every mode enum's first value is a Replace**, and UnrealScript uses +the first value when you omit the field. + +- `Costs` listed without `CostMode` => every existing cost is wiped, keeping only what you listed. +- An `Effects`, `Triggers` or conditions entry without `Mode` => the whole target array is cleared + first. With several entries each defaulting, *each one re-clears*, so only the last survives. +- A name array without its `...Mode` => the game's array is replaced wholesale. + +See [Edit modes](../getting-started/edit-modes.md). The log records array wipes, so the debug +output will show it. + +There is a second-order effect worth knowing: after a wipe, an entry you *did* list is constructed +fresh from its class, so every field you did not `Set` holds that class's defaults - not the +ability's old values. + +## The field I want isn't listed anywhere + +Some things genuinely cannot be edited per ability: + +- **The field is `config` on the game class.** It is read from the game's own `.ini`, not from the + template, so it is global rather than per-ability. Set it in your own mod's `XComGameCore.ini` + instead. For example: + + ```ini + [XComGame.X2Effect_BondmateAimAdjust] + ThreatenedBondmateAimBonus=10 + BondmateTargetAimBonus=20 + BondmateTargetCritBonus=0 + + [XComGame.X2Effect_BondmateBleedout] + BleedoutDurationAdjustment=2 + ``` + +- **The field is read via the class default rather than the instance.** Editing the template's copy + changes nothing because the game never reads it. These are listed as *not editable* on the + relevant reference page, with the reason. + +- **The behaviour lives in native code or in a different config file entirely.** Fire's + tile-to-tile spread is one of these: it is native, and the only knob is the global + `LimitFireSpreadTiles` in `XComGameData.ini`. + +!!! warning "Inert keys in the game's own config" + `DefaultGameCore.ini` ships `ThreatenedBondmateAimBonusOutsideZone`, + `BondmateTargetAimBonusOutsideZone` and `BondmateTargetCritBonusOutsideZone`. **No game class + declares any of them** - they do nothing, whatever you set. Also note + `X2Effect_SpectralZombie` and `X2Effect_SpectralArmyUnit` have identically-named keys in + separate sections; it is easy to edit the wrong one. + +## Load order + +If an edit works alone but not alongside another mod, that mod is probably rewriting the same +template after Ability Editor does. Edits are applied in +`OnPostTemplatesCreated`; a mod that runs later wins. + +Ability Editor ships a commented run-order hint in `XComGame.ini`: + +```ini +[AbilityEditor CHDLCRunOrder] +; +RunAfter=LWOverhaul +``` + +Uncomment and adapt it to force Ability Editor to run after a specific overhaul mod. This uses the +Community Highlander's run-order mechanism, so it requires the Highlander to be installed. + +## I edited a class from another mod and nothing resolved + +Unqualified class names are assumed to be base game - `X2Effect_Foo` becomes +`XComGame.X2Effect_Foo`. Qualify cross-mod classes with their package: + +```ini +Class="MyModPackage.X2Effect_Foo" +``` + +The log reports `AbilityEdit: Failed to load class: ` when a class cannot be +resolved. If the class loads but has no dedicated editor, it still accepts its family's shared +fields - and for conditions, that shared set is **empty**, so nothing but `Class` and `Mode` will +apply. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..9e81e3f --- /dev/null +++ b/docs/index.md @@ -0,0 +1,66 @@ +# Ability Editor + +An XCOM 2: War of the Chosen mod that changes how existing abilities work **purely from config**. +Costs, cooldowns, charges, effects, conditions and template fields of any +ability (base game, DLC or another mod's) can be edited by adding `+AbilityEdits` entries to an +`.ini` file. + +Letting a Ranger keep acting after Slash is just: + +```ini +[AbilityEditor.X2DLCInfo_AbilityEditor] ++AbilityEdits=( \\ + Ability=SwordSlice, \\ + CostMode=eACEM_Merge, \\ + Costs=( \\ + ( \\ + Class="X2AbilityCost_ActionPoints", \\ + Mode=eACEM_Merge, \\ + SetNumPoints=true, \\ + NumPoints=1, \\ + SetConsumeAllPoints=true, \\ + ConsumeAllPoints=false \\ + ) \\ + ) \\ +) +``` + +## Start here + +
+ +- **[Install](getting-started/installation.md)** - get the mod running and find your config file. +- **[Config syntax](getting-started/config-syntax.md)** - how an entry is put together, and the + `Set` guard rule that trips up everyone once. +- **[Edit modes](getting-started/edit-modes.md)** - what the `Mode` fields do, and why leaving one + out can wipe an ability's costs. +- **[Reference](reference/index.md)** - every field, for every class, across the nine families. + +
+ +## What you can edit + +Nine families of ability internals, plus the template's own fields: + +| Family | Config key | What it controls | +|---|---|---| +| [Costs](reference/costs/index.md) | `Costs` | Action points, ammo, charges, focus, consumed items | +| [Cooldown](reference/cooldown/index.md) | `Cooldown` | Turn cooldowns, per-player-type and shared cooldowns | +| [Charges](reference/charges/index.md) | `Charges` | Initial charges and bonus charges from other abilities | +| [Effects](reference/effects/index.md) | `Effects` | What the ability actually *does* - damage, stats, stuns, armor | +| [Conditions](reference/conditions/index.md) | *(seven slots)* | Who and when the ability can affect | +| [ToHitCalc](reference/tohitcalc/index.md) | `ToHitCalc` | Aim, crit, guaranteed hits, stat rolls | +| [TargetStyle](reference/targetstyle/index.md) | `TargetStyle` | How the primary target is picked | +| [MultiTargetStyle](reference/multitargetstyle/index.md) | `MultiTargetStyle` | Area shapes - radius, cone, line, cylinder | +| [Triggers](reference/triggers/index.md) | `Triggers` | What causes the ability to fire | + +!!! tip "For tool authors" + The whole config API is published as machine-readable + [`schema.json`](schema.json) - + +## Troubleshooting + +The mod does not validate your config. A misspelled field name is silently ignored by the game's +`.ini` parser with no log line at all, and several `Mode` fields default to *replace*. If something +isn't working, [Troubleshooting](guides/troubleshooting.md) covers the failure modes in the order +they actually occur. diff --git a/docs/schema.json b/docs/schema.json index 8f6fd2d..2044467 100644 --- a/docs/schema.json +++ b/docs/schema.json @@ -1,6 +1,6 @@ { "$comment": "Generated by .scripts/generate-docs.ps1 - do not edit by hand.", - "sourceHash": "137b302f4e4d45b5be645dbaeb9d107361eff7b1613d515785ff9d424cf342cf", + "sourceHash": "7cfb2e78f5a7c80c370c9c98ea1041fb4b4127066e0665b42a7523c93a4afa96", "enums": [ { "name": "EStatChangeMode", @@ -185,7 +185,7 @@ "name": "Mode", "type": "EAbilityCostEditMode", "kind": "plain", - "description": "Per-entry edit mode (`EAbilityCostEditMode`), see [Edit modes](#edit-modes)." + "description": "Per-entry edit mode (`EAbilityCostEditMode`). Defaults to the enum's first value, which clears the existing list." }, { "name": "FreeCost", @@ -478,7 +478,7 @@ "name": "Mode", "type": "EArrayEditMode", "kind": "plain", - "description": "Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes)." + "description": "Per-entry edit mode (`EArrayEditMode`). Defaults to the enum's first value, which clears the existing array." }, { "name": "OwnerHasSoldierAbilitiesMode", @@ -1560,7 +1560,7 @@ "name": "Mode", "type": "EArrayEditMode", "kind": "plain", - "description": "Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes)." + "description": "Per-entry edit mode (`EArrayEditMode`). Defaults to the enum's first value, which clears the existing array." }, { "name": "ApplyOnHit", @@ -4154,7 +4154,7 @@ "name": "Mode", "type": "EArrayEditMode", "kind": "plain", - "description": "Per-entry edit mode (`EArrayEditMode`), see [Edit modes](#edit-modes)." + "description": "Per-entry edit mode (`EArrayEditMode`). Defaults to the enum's first value, which clears the existing array." }, { "name": "Priority", @@ -6013,7 +6013,7 @@ "X2AbilityCooldownEditor_Rend", "X2AbilityCooldownEditor_Base" ], - "intro": "Edits the template's `AbilityCooldown`. With `Class` **omitted**, the existing cooldown is edited **in place** (no-op if the ability has none). With `Class` set, the existing cooldown is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class's default value.", + "intro": "Edits the template's `AbilityCooldown`. With `Class` **omitted**, the existing cooldown is edited **in place** (no-op if the ability has none). With `Class` set, the existing cooldown is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance - any field you do not `Set` then takes the class's default value.", "editors": [ { "class": "X2AbilityCooldownEditor_AidProtocol", @@ -6304,7 +6304,7 @@ "X2AbilityChargesEditor_StasisLance", "X2AbilityChargesEditor_Base" ], - "intro": "Edits the template's `AbilityCharges`. With `Class` **omitted**, the existing charges object is edited **in place** (no-op if the ability has none). With `Class` set, the existing object is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance — any field you do not `Set` then takes the class's default value. `RemoveCharges=true` removes the charges object entirely.", + "intro": "Edits the template's `AbilityCharges`. With `Class` **omitted**, the existing charges object is edited **in place** (no-op if the ability has none). With `Class` set, the existing object is edited in place when it is already exactly that class; otherwise it is **replaced** by a new instance - any field you do not `Set` then takes the class's default value. `RemoveCharges=true` removes the charges object entirely.", "editors": [ { "class": "X2AbilityChargesEditor_CocoonSpawnChryssalid", @@ -50146,7 +50146,7 @@ "gameField": "Modifiers", "origin": "derived", "inheritedFrom": null, - "description": "X2Effect_ToHitModifier: replace-only — when non-empty, replaces Modifiers entirely", + "description": "X2Effect_ToHitModifier: replace-only - when non-empty, replaces Modifiers entirely", "replaceOnly": true }, { @@ -61421,7 +61421,7 @@ "X2AbilityToHitCalcEditor_StatCheck", "X2AbilityToHitCalcEditor_Base" ], - "intro": "Edits the template's to-hit calculation. Two slots exist: `ToHitCalc` (`Template.AbilityToHitCalc`) and `ToHitOwnerOnMissCalc` (`Template.AbilityToHitOwnerOnMissCalc`), both taking a `ToHitCalcEdit` block. With `Class` **omitted**, the existing calc is edited **in place**; with `Class` set, the existing calc is edited in place when it is already exactly that class, otherwise it is **replaced** by a new instance (unset fields then take class defaults). Classes without a dedicated editor below (e.g. `X2AbilityToHitCalc_StandardMelee`, `X2AbilityToHitCalc_DeadEye`) are still valid `Class` values — they get the fields of their nearest listed ancestor.", + "intro": "Edits the template's to-hit calculation. Two slots exist: `ToHitCalc` (`Template.AbilityToHitCalc`) and `ToHitOwnerOnMissCalc` (`Template.AbilityToHitOwnerOnMissCalc`), both taking a `ToHitCalcEdit` block. With `Class` **omitted**, the existing calc is edited **in place**; with `Class` set, the existing calc is edited in place when it is already exactly that class, otherwise it is **replaced** by a new instance (unset fields then take class defaults). Classes without a dedicated editor below (e.g. `X2AbilityToHitCalc_StandardMelee`, `X2AbilityToHitCalc_DeadEye`) are still valid `Class` values - they get the fields of their nearest listed ancestor.", "editors": [ { "class": "X2AbilityToHitCalcEditor_StatCheck_UnitVsUnit", @@ -63130,7 +63130,7 @@ "X2AbilityTriggerEditor_Event", "X2AbilityTriggerEditor_Base" ], - "intro": "Edits the `AbilityTriggers` array of the template. The trigger of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`. **Caveat:** adding a *new* `X2AbilityTrigger_EventListener` from config is rarely useful — its `ListenerData.EventFn` delegate can only be assigned in code and stays `none`. Editing an existing listener trigger preserves its `EventFn`. `X2AbilityTrigger_OnAbilityActivated` is handled by the EventListener editor (its `MatchAbilityActivated` field is protected and cannot be set). See also `AbilityEventListenerEdits` in the template fields for the separate `Template.AbilityEventListeners` array.", + "intro": "Edits the `AbilityTriggers` array of the template. The trigger of class `Class` is edited **in place** if present; otherwise behaviour depends on `Mode`. **Caveat:** adding a *new* `X2AbilityTrigger_EventListener` from config is rarely useful - its `ListenerData.EventFn` delegate can only be assigned in code and stays `none`. Editing an existing listener trigger preserves its `EventFn`. `X2AbilityTrigger_OnAbilityActivated` is handled by the EventListener editor (its `MatchAbilityActivated` field is protected and cannot be set). See also `AbilityEventListenerEdits` in the template fields for the separate `Template.AbilityEventListeners` array.", "editors": [ { "class": "X2AbilityTriggerEditor_UnitPostBeginPlay", diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..018476a --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,81 @@ +site_name: Ability Editor +site_description: >- + Retune XCOM 2 (War of the Chosen) abilities entirely from .ini config - + costs, cooldowns, charges, effects, conditions and template fields. +site_url: https://boundir.github.io/AbilityEditor/ +repo_url: https://github.com/boundir/AbilityEditor +repo_name: boundir/AbilityEditor +edit_uri: edit/master/docs/ + +docs_dir: docs +site_dir: site + +theme: + name: material + features: + - navigation.indexes + - navigation.top + - navigation.tracking + - content.code.copy + - search.highlight + - search.suggest + - toc.follow + palette: + - media: "(prefers-color-scheme: light)" + scheme: default + primary: teal + accent: teal + toggle: + icon: material/weather-night + name: Switch to dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: teal + accent: teal + toggle: + icon: material/weather-sunny + name: Switch to light mode + +plugins: + - search + - gen-files: + scripts: + - scripts/gen_reference.py + - scripts/gen_coverage.py + - literate-nav: + nav_file: SUMMARY.md + - section-index + +markdown_extensions: + - admonition + - attr_list + - md_in_html + - tables + - toc: + permalink: true + - pymdownx.details + - pymdownx.superfences + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.snippets + +nav: + - Home: index.md + - Getting started: + - getting-started/installation.md + - getting-started/config-syntax.md + - getting-started/edit-modes.md + - Guides: + - guides/examples.md + - guides/troubleshooting.md + - guides/bridge-mods.md + - guides/legacy-1x.md + - Reference: reference/ + - Contributing: + - contributing/adding-an-editor.md + - contributing/doc-coverage.md + +extra: + social: + - icon: fontawesome/brands/github + link: https://github.com/boundir/AbilityEditor diff --git a/requirements-docs.txt b/requirements-docs.txt new file mode 100644 index 0000000..e863511 --- /dev/null +++ b/requirements-docs.txt @@ -0,0 +1,5 @@ +mkdocs==1.6.1 +mkdocs-material==9.5.49 +mkdocs-gen-files==0.5.0 +mkdocs-literate-nav==0.6.1 +mkdocs-section-index==0.3.9 diff --git a/scripts/ae_render.py b/scripts/ae_render.py new file mode 100644 index 0000000..9256ed8 --- /dev/null +++ b/scripts/ae_render.py @@ -0,0 +1,149 @@ +"""Shared rendering helpers for the Ability Editor reference pages. + +The site is a dumb transform of ``docs/schema.json``; all domain knowledge about +UnrealScript lives in ``.scripts/generate-docs.ps1``, which produces that file. +Nothing here should need to know what an ``X2Effect`` is. +""" + +from __future__ import annotations + +import json +import re +from pathlib import Path +from typing import Any, Iterable + +REPO_ROOT = Path(__file__).resolve().parent.parent +SCHEMA_PATH = REPO_ROOT / "docs" / "schema.json" + + +def load_schema() -> dict[str, Any]: + with SCHEMA_PATH.open(encoding="utf-8-sig") as handle: + return json.load(handle) + + +# --------------------------------------------------------------------------- # +# Slugs and links +# --------------------------------------------------------------------------- # + +def family_slug(family: dict[str, Any]) -> str: + """Directory name for a family, e.g. 'MultiTargetStyle' -> 'multitargetstyle'.""" + return re.sub(r"[^a-z0-9]+", "-", family["name"].lower()).strip("-") + + +def editor_slug(editor: dict[str, Any]) -> str: + """Page name for an editor, keyed on its game class so URLs are guessable. + + Catch-all editors have no game class, so fall back to the editor class name. + """ + name = editor.get("gameClass") or editor["class"] + return name.lower() + + +def anchor(text: str) -> str: + """Reproduce the heading anchors mkdocs generates, for intra-page links.""" + slug = text.strip().lower() + slug = re.sub(r"[^\w\s-]", "", slug) + return re.sub(r"[\s_]+", "-", slug).strip("-") + + +# --------------------------------------------------------------------------- # +# Markdown primitives +# --------------------------------------------------------------------------- # + +def code(value: Any) -> str: + """Inline code, or an em dash when there is nothing to show.""" + if value is None or value == "": + return "—" + return f"`{value}`" + + +def escape_cell(text: str) -> str: + """Make a string safe inside a markdown table cell.""" + return str(text).replace("|", "\\|").replace("\n", " ") + + +def table(headers: Iterable[str], rows: Iterable[Iterable[str]]) -> str: + headers = list(headers) + out = ["| " + " | ".join(headers) + " |", + "|" + "|".join("---" for _ in headers) + "|"] + for row in rows: + out.append("| " + " | ".join(str(cell) for cell in row) + " |") + return "\n".join(out) + "\n" + + +# --------------------------------------------------------------------------- # +# Field rendering +# --------------------------------------------------------------------------- # + +def requires_cell(field: dict[str, Any]) -> str: + """What the user must also write for this field to take effect. + + Three shapes exist: a Set guard for scalars, a companion Mode field for + arrays, and replace-only arrays which have neither (writing a mode field + name for those would name something that does not exist). + """ + if field.get("replaceOnly"): + return "non-empty *(replace-only)*" + if field.get("guard"): + return f"`{field['guard']}=true`" + if field.get("modeField"): + mode = f"`{field['modeField']}`" + if field.get("modeEnum"): + mode += f" (`{field['modeEnum']}`)" + return mode + return "—" + + +def describe(field: dict[str, Any]) -> str: + """The field's prose, or an honest derived line when none was authored. + + Only ~2% of fields carry a description today. Rather than leave 3,400 blank + cells, fall back to something true that is built from data we already have, + and mark it as derived so a real description is visibly different. + """ + description = (field.get("description") or "").strip() + if description: + return escape_cell(description) + + game_field = field.get("gameField") + field_type = field.get("type") + if game_field and field_type: + return f"Sets `{game_field}` (`{field_type}`)." + if game_field: + return f"Sets `{game_field}`." + return "—" + + +def field_rows(fields: Iterable[dict[str, Any]]) -> list[list[str]]: + rows = [] + for field in fields: + rows.append([ + code(field["config"]), + code(field.get("type")), + requires_cell(field), + code(field.get("gameField")), + describe(field), + ]) + return rows + + +FIELD_HEADERS = ["Config field", "Type", "Requires", "Game field", "Description"] + + +def field_table(fields: Iterable[dict[str, Any]]) -> str: + fields = list(fields) + if not fields: + return "*No editable fields.*\n" + return table(FIELD_HEADERS, field_rows(fields)) + + +def not_editable_block(entries: Iterable[dict[str, Any]]) -> str: + """Fields the generator proved cannot be set from config, with the reason.""" + entries = list(entries) + if not entries: + return "" + lines = ['??? warning "Not editable from config"', ""] + for entry in entries: + lines.append(f" - `{entry['name']}` — {escape_cell(entry.get('reason', ''))}") + lines.append("") + return "\n".join(lines) + "\n" diff --git a/scripts/gen_coverage.py b/scripts/gen_coverage.py new file mode 100644 index 0000000..49e812f --- /dev/null +++ b/scripts/gen_coverage.py @@ -0,0 +1,124 @@ +"""Generate the documentation-coverage page. + +Field descriptions come from ``//`` comments in ``AE_DataStructures.uc``. Because +``schema.json`` flattens inheritance, one comment can light up many rendered rows +- so raw row counts wildly overstate the work. This page reports both, and lists +what to write next in the order that helps most. +""" + +from __future__ import annotations + +import sys +from collections import defaultdict +from pathlib import Path +from typing import Any + +import mkdocs_gen_files + +# See the note in gen_reference.py: runpy.run_path does not extend sys.path. +sys.path.insert(0, str(Path(__file__).resolve().parent)) + +from ae_render import code, escape_cell, family_slug, load_schema, table # noqa: E402 + +SCHEMA = load_schema() + + +def collect() -> tuple[dict[str, dict[str, Any]], dict[str, dict[str, int]]]: + """Return (per-config-key stats, per-family stats).""" + keys: dict[str, dict[str, Any]] = defaultdict( + lambda: {"rows": 0, "described": False, "families": set()} + ) + families: dict[str, dict[str, int]] = {} + + for family in SCHEMA["families"]: + unique: set[str] = set() + described_unique: set[str] = set() + for editor in family["editors"]: + for field in editor["fields"]: + name = field["config"] + entry = keys[name] + entry["rows"] += 1 + entry["families"].add(family["name"]) + unique.add(name) + if (field.get("description") or "").strip(): + entry["described"] = True + described_unique.add(name) + families[family["name"]] = { + "unique": len(unique), + "described": len(described_unique), + } + return keys, families + + +keys, families = collect() + +total_keys = len(keys) +described_keys = sum(1 for v in keys.values() if v["described"]) +total_rows = sum(v["rows"] for v in keys.values()) +described_rows = sum(v["rows"] for v in keys.values() if v["described"]) + + +def pct(part: int, whole: int) -> str: + return f"{(100.0 * part / whole):.0f}%" if whole else "—" + + +family_rows = [] +for family in SCHEMA["families"]: + stats = families[family["name"]] + family_rows.append([ + f"[{family['name']}](../reference/{family_slug(family)}/index.md)", + str(stats["unique"]), + str(stats["described"]), + pct(stats["described"], stats["unique"]), + ]) + +undescribed = sorted( + ((name, v["rows"], sorted(v["families"])) for name, v in keys.items() if not v["described"]), + key=lambda item: -item[1], +)[:40] + +body = "\n".join([ + "# Documentation coverage", + "", + "Field descriptions are authored as `//` comments in " + "`AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc` and flow into " + "[`schema.json`](../schema.json) and these pages. See " + "[Adding an editor](adding-an-editor.md) for where the comment goes - it is above the " + "*value* var, not the `Set` guard.", + "", + "## Where things stand", + "", + table( + ["Measure", "Described", "Total", "Coverage"], + [ + ["Unique config keys", str(described_keys), str(total_keys), pct(described_keys, total_keys)], + ["Rendered table rows", str(described_rows), str(total_rows), pct(described_rows, total_rows)], + ], + ), + "", + "The two rows differ because inheritance is flattened: a field on " + "`X2AbilityEffectsEditor` is rendered for every effect class that inherits it. **Writing one " + "comment can therefore document dozens of rows**, which is why the unique-key count is the " + "number worth tracking.", + "", + "## By family", + "", + table(["Family", "Unique keys", "Described", "Coverage"], family_rows), + "", + "## Highest-value keys still undescribed", + "", + "Ordered by how many rendered rows each one would fix.", + "", + table( + ["Config key", "Rows it would document", "Families"], + [[code(name), str(rows), escape_cell(", ".join(fams))] for name, rows, fams in undescribed], + ) if undescribed else "*Everything is described.*\n", + "", +]) + +with mkdocs_gen_files.open("contributing/doc-coverage.md", "w") as handle: + handle.write(body) +mkdocs_gen_files.set_edit_path( + "contributing/doc-coverage.md", + "AbilityEditor/Src/AbilityEditor/Classes/AE_DataStructures.uc", +) diff --git a/scripts/gen_reference.py b/scripts/gen_reference.py new file mode 100644 index 0000000..415f395 --- /dev/null +++ b/scripts/gen_reference.py @@ -0,0 +1,322 @@ +"""Generate the reference section of the docs site from ``docs/schema.json``. + +Run by mkdocs-gen-files at build time; nothing here is committed. +""" + +from __future__ import annotations + +import sys +from collections import defaultdict +from pathlib import Path +from typing import Any + +import mkdocs_gen_files + +# mkdocs-gen-files executes these with runpy.run_path, which does not put the script's own +# directory on sys.path, so a plain "import ae_render" would fail. +sys.path.insert(0, str(Path(__file__).resolve().parent)) + +from ae_render import ( # noqa: E402 + anchor, + code, + editor_slug, + escape_cell, + family_slug, + field_table, + load_schema, + not_editable_block, + table, +) + +SCHEMA = load_schema() +SRC = ".scripts/generate-docs.ps1" + +SHARED_HEADING = "Shared fields" + + +def own_fields(editor: dict[str, Any]) -> list[dict[str, Any]]: + """Fields this editor introduces itself, in schema order.""" + return [f for f in editor["fields"] if f.get("origin") == "derived" and not f.get("inheritedFrom")] + + +def shared_fields(family: dict[str, Any]) -> list[dict[str, Any]]: + """Fields every editor in the family has, taken from the catch-all. + + The catch-all (`*_Base`) accepts any class, so whatever it exposes is by + definition available family-wide. Falling back to the widest editor keeps + this working if a family ever loses its catch-all. + """ + for editor in family["editors"]: + if editor.get("catchAll"): + return editor["fields"] + if not family["editors"]: + return [] + return max(family["editors"], key=lambda e: len(e["fields"]))["fields"] + + +def inherited_groups(editor: dict[str, Any]) -> dict[str, list[dict[str, Any]]]: + """Inherited fields bucketed by the editor that defines them.""" + groups: dict[str, list[dict[str, Any]]] = defaultdict(list) + for field in editor["fields"]: + source = field.get("inheritedFrom") + if source: + groups[source].append(field) + return groups + + +def write(path: str, body: str) -> None: + with mkdocs_gen_files.open(path, "w") as handle: + handle.write(body) + mkdocs_gen_files.set_edit_path(path, SRC) + + +# --------------------------------------------------------------------------- # +# Pages +# --------------------------------------------------------------------------- # + +def render_family_index(family: dict[str, Any]) -> str: + shared = shared_fields(family) + concrete = [e for e in family["editors"] if not e.get("catchAll")] + + out = [f"# {family['name']}", ""] + + if family.get("intro"): + out += [family["intro"], ""] + + config_key = family.get("configKey") + if config_key: + out += [f"Config key: `{config_key}`. Edit struct: `{family['editStruct']}`.", ""] + else: + out += [f"Edit struct: `{family['editStruct']}`.", ""] + + # Dispatch order matters: first match wins, so a class is handled by the first + # editor in this list that accepts it. + if family.get("dispatchOrder"): + chain = [] + for cls in family["dispatchOrder"]: + editor = next((e for e in family["editors"] if e["class"] == cls), None) + if editor is None: + continue + chain.append("any other class" if editor.get("catchAll") else f"`{editor['gameClass']}`") + out += [ + "## Dispatch order", + "", + "The first editor that accepts a class handles it, so a class is matched by the " + "earliest entry below that it derives from.", + "", + " → ".join(chain), + "", + ] + + out += [ + f"## {SHARED_HEADING}", + "", + f"Available on every `{family['editStruct']}` entry, whatever its `Class`.", + "", + field_table(shared), + "", + ] + + if concrete: + rows = [] + for editor in sorted(concrete, key=lambda e: e.get("gameClass") or e["class"]): + own = len(own_fields(editor)) + badge = " *(abstract)*" if editor.get("abstract") else "" + rows.append([ + f"[`{editor['gameClass']}`]({editor_slug(editor)}.md){badge}", + str(own) if own else "—", + code(editor.get("extends")), + ]) + out += [ + "## Classes", + "", + "Class-specific fields are documented on each page below. A class with no dedicated " + f"editor still accepts every field in [{SHARED_HEADING}](#{anchor(SHARED_HEADING)}).", + "", + table(["Game class", "Own fields", "Editor extends"], rows), + "", + ] + + return "\n".join(out) + + +def render_editor(editor: dict[str, Any]) -> str: + own = own_fields(editor) + groups = inherited_groups(editor) + + title = editor.get("gameClass") or editor["class"] + out = [f"# {title}", ""] + + meta = [f"Editor: `{editor['class']}`"] + if editor.get("extends"): + meta.append(f"extends `{editor['extends']}`") + out += [" · ".join(meta) + ".", ""] + + if editor.get("abstract"): + out += [ + "!!! note", + " This game class is abstract. It exists here so its fields reach the concrete " + " classes that derive from it; you cannot name it as a `Class` yourself.", + "", + ] + + out += ["## Own fields", "", field_table(own), ""] + + if groups: + out += ["## Inherited fields", ""] + for source, fields in groups.items(): + names = ", ".join(f"`{f['config']}`" for f in fields) + out += [ + f'??? abstract "From `{source}` ({len(fields)})"', + "", + f" {names}", + "", + ] + out += [ + f"Every one of these is documented under " + f"[{SHARED_HEADING}](index.md#{anchor(SHARED_HEADING)}) or on the page for the class " + "that introduces it.", + "", + ] + + out.append(not_editable_block(editor.get("notEditable", []))) + return "\n".join(out) + + +def render_reference_index() -> str: + rows = [] + for family in SCHEMA["families"]: + concrete = [e for e in family["editors"] if not e.get("catchAll")] + rows.append([ + f"[{family['name']}]({family_slug(family)}/index.md)", + code(family.get("configKey")), + code(family["editStruct"]), + str(len(concrete)), + ]) + + return "\n".join([ + "# Reference", + "", + "Every field an `+AbilityEdits` entry can carry, generated from the mod's UnrealScript " + "sources. See [Config syntax](../getting-started/config-syntax.md) for how entries are " + "written and [Edit modes](../getting-started/edit-modes.md) for what the `Mode` fields do.", + "", + table(["Family", "Config key", "Edit struct", "Classes"], rows), + "", + "## Also here", + "", + "- [Ability template fields](template-fields.md) - the scalars and arrays you set directly " + "on an `+AbilityEdits` entry.", + "- [Nested structs](nested-structs.md) - the shape of every block that nests inside one.", + "", + "!!! tip \"Machine-readable\"", + " The whole API is published as [`schema.json`](../schema.json) - the same file this " + " site is generated from. It is versioned with each release and carries a `sourceHash` " + " so tooling can detect staleness.", + "", + ]) + + +def render_template_fields() -> str: + template = SCHEMA["template"] + return "\n".join([ + "# Ability template fields", + "", + "Set directly on an `+AbilityEdits` entry, alongside `Ability`. These change the ability " + "template itself rather than one of its costs, effects or conditions.", + "", + field_table(template["fields"]), + "", + not_editable_block(template.get("notEditable", [])), + ]) + + +def render_edit_modes() -> str: + """The Mode enums. Generated because every value is already described in the schema. + + The first value of each enum is the UnrealScript default, and in every one of these it is a + Replace - which is the single most expensive thing to not know about this config format. + """ + out = [ + "# Edit modes", + "", + "Array-shaped fields take a companion `Mode` that says how your list combines with what " + "the ability already has.", + "", + "!!! danger \"The default is destructive\"", + " UnrealScript uses an enum's **first value** when you omit the field, and in every " + " enum below that first value is a Replace. Omitting `CostMode` does not add a cost - " + " it throws away every cost the ability had and keeps only what you listed. Write the " + " mode explicitly; you almost always want `Merge`.", + "", + "!!! warning \"`AddOnly` does not append\"", + " For **name arrays** (`ENameArrayEditMode`), `eNAEM_AddOnly` writes your values only " + " when the target array is currently *empty*. It is \"provide a default\", not \"add " + " without removing\" - that is `Merge`. For effects, conditions and costs, `AddOnly` " + " *is* a synonym for `Merge`. Different enums, near-identical names, opposite " + " behaviour.", + "", + ] + for enum in SCHEMA["enums"]: + rows = [[code(v["name"]), escape_cell(v.get("description") or "")] for v in enum["values"]] + out += [f"## `{enum['name']}`", "", table(["Value", "Meaning"], rows), ""] + return "\n".join(out) + + +def render_nested_structs() -> str: + out = [ + "# Nested structs", + "", + "The shape of each block that nests inside an `+AbilityEdits` entry. These are the " + "structures you type; which *fields* apply depends on the `Class` you name - see the " + "family pages under [Reference](index.md).", + "", + ] + for struct in SCHEMA["structs"]: + rows = [] + for field in struct["fields"]: + if field.get("kind") == "guard": + continue # guards are shown in the Requires column of their value field + rows.append([ + code(field["name"]), + code(field.get("type")), + code(field.get("guard")) if field.get("guard") else "—", + escape_cell(field.get("description") or "") or "—", + ]) + out += [ + f"## `{struct['name']}`", + "", + table(["Field", "Type", "Guard", "Description"], rows) if rows else "*No fields.*\n", + "", + ] + return "\n".join(out) + + +# --------------------------------------------------------------------------- # +# Emit +# --------------------------------------------------------------------------- # + +summary: list[str] = ["* [Overview](index.md)", + "* [Ability template fields](template-fields.md)"] + +write("reference/index.md", render_reference_index()) +write("reference/template-fields.md", render_template_fields()) +write("reference/nested-structs.md", render_nested_structs()) +write("getting-started/edit-modes.md", render_edit_modes()) + +for family in SCHEMA["families"]: + slug = family_slug(family) + write(f"reference/{slug}/index.md", render_family_index(family)) + summary.append(f"* [{family['name']}]({slug}/index.md)") + + children = [e for e in family["editors"] if not e.get("catchAll")] + for editor in sorted(children, key=lambda e: e.get("gameClass") or e["class"]): + page = f"reference/{slug}/{editor_slug(editor)}.md" + write(page, render_editor(editor)) + summary.append(f" * [{editor.get('gameClass') or editor['class']}]" + f"({slug}/{editor_slug(editor)}.md)") + +summary.append("* [Nested structs](nested-structs.md)") + +with mkdocs_gen_files.open("reference/SUMMARY.md", "w") as handle: + handle.write("\n".join(summary) + "\n") From 24ef259fa3e16da4c2d1816c7622a56ef88af168 Mon Sep 17 00:00:00 2001 From: Boundir <30468080+boundir@users.noreply.github.com> Date: Tue, 22 Sep 2026 19:52:22 +0200 Subject: [PATCH 4/4] Bump GitHub Actions Node version --- .github/workflows/docs.yml | 8 ++++---- .github/workflows/schema-check.yml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 35406b3..f9b9c0b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -29,9 +29,9 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v7 with: python-version: '3.12' cache: pip @@ -47,7 +47,7 @@ jobs: - name: Upload Pages artifact if: github.event_name != 'pull_request' - uses: actions/upload-pages-artifact@v3 + uses: actions/upload-pages-artifact@v5 with: path: site @@ -64,4 +64,4 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} steps: - id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v5 diff --git a/.github/workflows/schema-check.yml b/.github/workflows/schema-check.yml index f9ead7f..1cf38ff 100644 --- a/.github/workflows/schema-check.yml +++ b/.github/workflows/schema-check.yml @@ -23,7 +23,7 @@ jobs: hash: runs-on: windows-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Compare source hash against the committed schema shell: pwsh