Event handler reference
Every event handler the game ships, the methods you override to write your own, and the conditions it models. Generated from the game assembly, so it tracks the current build. See Write a custom template type for the C# path and Patch and clone templates for wiring handlers from KDL.
An event handler is the unit of skill, perk, and status behaviour. Each entry in a SkillTemplate or PerkTemplate's EventHandlers list is one handler the game ticks through its lifecycle. There are two ways to author one:
- From data (KDL). Add, edit, or remove any built-in handler on a skill or perk and set its fields, naming the subtype with
type="<Name>". No C# needed. - From code (C#). Subclass
SkillEventHandlerTemplateandSkillEventHandlerand override the lifecycle methods when no built-in does what you want.
Lifecycle methods
When you write a handler in C#, these are the methods you override. The template is the factory the data holds, and its Create() returns the handler the game ticks. Override only the ones you need; the rest keep the base's empty default. None of these carry doc comments in the game assembly, so this lists the signature you implement against.
SkillEventHandler
The runtime behaviour. The game ticks this through a mission. Override the events you care about.
Events
| Method |
|---|
void OnAdded() |
void OnAfterBeingAttacked(Entity attacker, Skill skill) |
void OnAfterUse() |
void OnAnimationEvent(Element element, AnimationEvent event) |
void OnAnySkillAdded(Skill skill) |
void OnAnySkillAppliedByElement(Skill skill, Element element, SkillApplyEvent event) |
void OnAnySkillUsed(Skill skill) |
void OnApply(Actor user, Tile userTile, Tile targetTile, Tile centerTargetTile, Element element, bool isHit) |
void OnBeforeAnySkillUsed(Skill skill, Tile fromTile, Tile targetTile, EntityProperties properties, Entity overrideTargetEntity) |
void OnBeforeApply(Actor user, Tile userTile, Tile targetTile, Element element, ref float additionalDelayBeforeAnimationTrigger) |
void OnBeforeDamageReceived(Skill skill, Entity attacker, DamageInfo damageInfo, EntityProperties properties) |
void OnBeforeMissionStarted() |
void OnBeforeTargetHit(Skill skill, Entity targetEntity, DamageInfo damageInfo) |
bool OnBeforeUse(Actor user, Tile targetTile) |
void OnBeingAttacked(Skill skill, Actor attacker, Tile from, Tile at, EntityProperties properties) |
void OnBeingTargetedByAttack(Entity attacker, Skill skill) |
void OnCancel() |
void OnDamageReceived(Entity attacker, DamageInfo damageInfo) |
void OnDeath() |
void OnDefectCaused(Actor target, DefectTemplate defect, Skill skill) |
void OnDetermineActualTargetTile(ref Tile target) |
void OnDetermineFinalUserTile(Tile originTile, Tile targetTile, ref Tile finalTile) |
void OnEffectApplied() |
void OnElementDeath(Element element) |
void OnEnabledChanged(bool enabled) |
void OnMissed(Skill skill, Entity attacker) |
void OnMissionFinished() |
void OnMissionStarted() |
void OnModifyTargetProperties(EntityProperties targetProperties, Skill skill) |
void OnMoraleEvent(MoraleEvent event, float change) |
void OnMovement() |
void OnMovementFinished(Tile tile) |
void OnOperationFinished() |
void OnRefresh() |
void OnRemoved() |
void OnRoundEnd() |
void OnRoundStart() |
bool OnShouldCancelImpact(Actor attacker, Skill skill) |
void OnTargetHit(Skill skill, Entity targetEntity, DamageInfo damageInfo) |
void OnTargetKilled(Skill skill, Entity targetEntity) |
void OnTargetMissed(Skill skill, Entity targetEntity) |
void OnTileChanged(Tile tile) |
void OnTileHit(Skill skill, Tile tile, Tile aoeCenterTile, Vector3 impactPoint) |
void OnTurnEnd() |
void OnTurnStart() |
void OnUpdate(EntityProperties properties) |
void OnUse(Actor user, Tile targetTile, UsageParameter usageParams, ref bool applyToTile) |
bool OnVerifyTarget(Tile originTile, Tile targetTile) |
bool OnWouldDie(Entity attacker, Skill skill, DamageInfo damageInfo) |
Predicates
| Method |
|---|
bool CanHitEntityMoreThanOnce() |
bool HasStackCountDisplayed() |
bool IsApplicableTo(Tile targetTile, Entity overrideTargetEntity) |
bool IsCustomBusy() |
bool IsEnabled() |
bool IsHidden() |
bool IsPreventingActorUpdate() |
bool IsUsable() |
Other
| Method |
|---|
void AppendTooltipData(TooltipData tooltip) |
void GetAoETiles(Tile origin, Tile target, List<Tile> tiles) |
SkillEventHandlerTemplate
The factory the template data holds. Create() returns a fresh handler with the authored fields copied in.
Predicates
| Method |
|---|
bool IsUsable() |
Other
| Method |
|---|
void AppendTooltipData(TooltipData tooltip, SkillTemplate parentSkillTemplate, EntityProperties entityProperties, int elementCount) |
void ApplyToEntityProperties(EntityProperties properties) |
SkillEventHandler Create() |
Built-in handlers
The 153 handlers the game ships. Name one in type="<Name>" to add it, and set the fields listed; every field you do not set takes its type default. A field marked C# only is Odin-routed (an ITacticalCondition or IValueProvider) and cannot be set from KDL, so reach for the C# path when you need it. Enum fields list their allowed values.
append "EventHandlers" type="AddSkill" {
set "Event" enum="AddEvent" "OnAttack"
set "SkillToAdd" ref="SkillTemplate" "effect.bleeding"
}AccuracyStacks
| Field | Type | Values / notes |
|---|---|---|
AccuracyPerStack | int | |
IsSynchronizedWithOtherSkillsOfTheSameItem | bool | |
MaxStacks | int | |
MinStacks | int | |
StacksOnRoundStart | int | |
StacksOnUse | int |
AddItemSlot
| Field | Type | Values / notes |
|---|---|---|
Amount | int | |
SlotType | ItemSlot | All, COUNT, InfantryAccessory, InfantryArmor, InfantrySpecial, InfantryWeapon, ModularVehicleHeavy, ModularVehicleLight, ModularVehicleMedium, None, Vehicle, VehicleAccessory, VehicleHeavyTurret, VehicleLightTurret |
AddSkill
| Field | Type | Values / notes |
|---|---|---|
Condition | ITacticalCondition | C# only (Odin-routed): set in your handler in C#, see Conditions. |
Event | AddEvent | OnAdded, OnAttack, OnElementDeath, OnMissionStart, OnRemoved, OnRoundStart, OnTargetElementDestroyed, OnUse |
OnlyApplyOnHit | bool | |
OnlyApplyOnHitpointDamage | bool | |
OnlyApplyWhenNoElementWasDestroyed | bool | |
OnlyUsableOnTargetsWithoutSkill | bool | |
OnlyWhenSkillNotPresent | bool | |
ShowHUDText | bool | |
SkillToAdd | SkillTemplate | |
TagsCanPreventSkillUse | bool | |
TargetCannotHaveOneOfTheseTags | List<TagTemplate> | |
TargetRequiresOneOfTheseTags | List<TagTemplate> |
AddSkillAfterMovement
| Field | Type | Values / notes |
|---|---|---|
Effect | SkillTemplate |
AddSkillOnUse
| Field | Type | Values / notes |
|---|---|---|
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
SkillToAdd | SkillTemplate |
AddSkillRescuedUnit
| Field | Type | Values / notes |
|---|---|---|
Effect | SkillTemplate |
AmmoPouch
| Field | Type | Values / notes |
|---|---|---|
ApplyToType | ItemType | Accessory, Armor, None, Weapon |
BonusPercentage | float | |
MinimumBonus | int | |
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
ApplyAuthorityDisciplineMod
| Field | Type | Values / notes |
|---|---|---|
DisciplineModMult | float |
ApplySkillToSelf
| Field | Type | Values / notes |
|---|---|---|
ChanceToApply | int | |
Event | ApplyOnEvent | OnAdded, OnRoundEnd, OnRoundStart, OnSkillWithTagsUsed, OnTurnEnd, OnTurnStart |
RequiredLogic | LogicType | And, Or |
RequiredTags | List<TagTemplate> | |
SkillToApply | SkillTemplate |
Arcing
| Field | Type | Values / notes |
|---|---|---|
ArcingSkill | SkillTemplate | |
MaxBounces | int | |
Radius | int |
AttachObject
| Field | Type | Values / notes |
|---|---|---|
AttachAt | AttachmentPoint | Center, Damage, Damage2, Spine |
AttachAtInfantry | AttachmentPoint | Center, Damage, Damage2, Spine |
ObjectToAttach | GameObject |
AttachObjectWhileActive
| Field | Type | Values / notes |
|---|---|---|
Prefab | GameObject |
AttachTemporaryPrefab
| Field | Type | Values / notes |
|---|---|---|
AttachmentSlot | VisualAlterationSlot | Animation, Back, Back_Special, EntireModel, Hand_L, Hand_L_Special, Hand_R, Hand_R_Special, Last, Mount01, Mount02, Mount03, None, Torso, Turret |
CancelDelay | float | |
LocalOffset | Vector3 | |
LocalRotation | Vector3 | |
LocalScale | Vector3 | |
Prefab | GameObject |
Attack
| Field | Type | Values / notes |
|---|---|---|
AccuracyBonus | float | |
AccuracyDropoff | float | |
AccuracyDropoffMult | float | |
AccuracyMult | float | |
ApplyMode | ApplicationMode | Automatic, Manual |
ArmorPenetration | float | |
ArmorPenetrationDropoff | float | |
ArmorPenetrationDropoffAOE | float | |
ArmorPenetrationDropoffMult | float | |
ArmorPenetrationMult | float | |
Damage | float | |
DamageDropoff | float | |
DamageDropoffAOE | float | |
DamageDropoffMult | float | |
DamageFilterCondition | ITacticalCondition | C# only (Odin-routed): set in your handler in C#, see Conditions. |
DamageMult | float | |
DamagePctCurrentHitpoints | float | |
DamagePctCurrentHitpointsMin | float | |
DamagePctMaxHitpoints | float | |
DamagePctMaxHitpointsMin | float | |
DamageToArmorDurability | float | |
DamageToArmorDurabilityDropoff | float | |
DamageToArmorDurabilityDropoffAOE | float | |
DamageToArmorDurabilityDropoffMult | float | |
DamageToArmorDurabilityMult | float | |
DamageVisualizationType | DamageVisualizationType | Bullet, Burn, COUNT |
DestroyHalfCover | HalfCoverClass | Heavy, Light, Medium, None |
DismemberArea | RagdollHitArea | Antennas, Any, Arms, Heads, Legs, Tails, Torso |
DismemberChance | int | |
ElementsHit | int | |
ElementsHitPercentage | float | |
EntityFlagsRequired | EntityFlags | CantEnterContainers, DesignatedTarget, HeavyWeaponsAllowed, IgnoreArmorMovementCosts, IgnoreDeploymentRequirements, IgnoreSuppressedAPLoss, ImmuneDesignatedTarget, ImmuneToDamage, ImmuneToIndirectSuppression, ImmuneToLightEffect, ImmuneToMorale, ImmuneToSuppression, ImmuneToSuppressionFromElementLost, IrrelevantToMorale, None, Rooted, RootedByStance, Stunned |
FatalityType | FatalityType | Burning, Default, Explosion, Laser, Plasma |
IsHalfCoverDestroyedOnAOECenterTileOnly | bool | |
Suppression | float | |
SuppressionDealtMult | float | |
SuppressionDropoffAOE | float | |
TargetCannotHaveOneOfTheseTags | List<TagTemplate> | |
TargetRequiresOneOfTheseTags | List<TagTemplate> |
AttackMorale
| Field | Type | Values / notes |
|---|---|---|
MoraleDamage | int | |
MoraleStateReduction | int |
AttackOrder
| Field | Type | Values / notes |
|---|---|---|
ActionPoints | int | |
Effect | SkillTemplate |
AttackProc
| Field | Type | Values / notes |
|---|---|---|
CanBeTriggeredByAnySkill | bool | |
Chance | int | |
Condition | ITacticalCondition | C# only (Odin-routed): set in your handler in C#, see Conditions. |
OnlyApplyOnHitpointDamage | bool | |
OnlyApplyWhenNoElementWasDestroyed | bool | |
ShowHUDText | bool | |
SkillToAdd | SkillTemplate |
Berserk
| Field | Type | Values / notes |
|---|---|---|
ActionPoints | int | |
ConsumedOnTrigger | bool |
Buyout
| Field | Type | Values / notes |
|---|---|---|
EntityToSpawn | EntityTemplate | |
Faction | FactionType | AlliedLocalForces, Civilian, Constructs, EnemyLocalForces, Neutral, Pirates, Player, PlayerAI, RogueArmy, Wildlife |
OverlayIcon | Sprite | |
Whitelist | EntityTemplate[] |
CameraShake
| Field | Type | Values / notes |
|---|---|---|
CameraEffect | CameraEffectType | HeavyQuake, LightQuake, MoveXZ, MoveY, None |
Duration | float | |
Intensity | float | |
RecoverTime | float |
CauseDefect
| Field | Type | Values / notes |
|---|---|---|
Severity | DefectSeverity | Heavy, Light, Medium |
ChangeAPBasedOnHP
| Field | Type | Values / notes |
|---|---|---|
Thresholds | HpThreshold[] |
ChangeActionPointCost
| Field | Type | Values / notes |
|---|---|---|
CostDelta | int | |
CostMin | int | |
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
ChangeActionPoints
| Field | Type | Values / notes |
|---|---|---|
ActionPoints | int | |
ForceTurnToEnd | bool |
ChangeAttackCost
| Field | Type | Values / notes |
|---|---|---|
CostPerAttack | int | |
CostPerAttackMult | float |
ChangeDropChance
| Field | Type | Values / notes |
|---|---|---|
AdditionalDropChance | int |
ChangeFaction
| Field | Type | Values / notes |
|---|---|---|
Faction | FactionType | AlliedLocalForces, Civilian, Constructs, EnemyLocalForces, Neutral, Pirates, Player, PlayerAI, RogueArmy, Wildlife |
ChangeGrowthPotential
| Field | Type | Values / notes |
|---|---|---|
Delta | int |
ChangeHeatCapacity
| Field | Type | Values / notes |
|---|---|---|
HeatDissipationPerTurn | int | |
HeatPerUse | int | |
MaxHeat | int |
ChangeMalfunctionChance
| Field | Type | Values / notes |
|---|---|---|
ApplyOnlyToSkill | SkillTemplate | |
ApplyTo | ApplyType | AllAttacks, AllSkills, SpecificSkill, ThisSkill |
BaseMalfunctionChance | int | |
MalfunctionChancePerUse | int | |
ResetMalfunctionChance | bool |
ChangeMorale
| Field | Type | Values / notes |
|---|---|---|
ChangeIf | ChangeCondition | Always, CurrentMoraleIsHigher, CurrentMoraleIsLower |
ChangeMoraleTo | MoraleState | Fleeing, Neutral, Wavering |
Event | EventType | OnAdded, OnApply |
ChangeMovementCost
| Field | Type | Values / notes |
|---|---|---|
CostForTurning | int | |
CostPerSurface | Int32[] | |
CostPerTile | int | |
IsRooted | bool |
ChangeProperty
| Field | Type | Values / notes |
|---|---|---|
Amount | int | |
AmountMult | float | |
IncludePlusSign | bool | |
PropertyType | EntityPropertyType | AIPriorityMult, APEnterCost, APLeaveCost, Accuracy, AccuracyDropoff, AccuracyDropoffMult, AccuracyMult, ActionPoints, ActionPointsMult, AdditionalMovementCost, AdditionalTurningCost, Armor, ArmorDurabilityPerElement, ArmorMult, ArmorPenetration, ArmorPenetrationDropoff, ArmorPenetrationDropoffMult, ArmorPenetrationMult, BackwardsMovementMult, Concealment, ConcealmentMult, CoverEffectivenessMult, CoverGainedByVehicleOffset, CoverTypeOffset, CriticalChance, CriticalDamageMult, Damage, DamageDropoff, DamageDropoffMult, DamageMult, DamageSustainedMult, DamageSustainedSquadLeaderMult, DamageToArmorDurability, DamageToArmorDurabilityDropoff, DamageToArmorDurabilityDropoffMult, DamageToArmorDurabilityMult, DamageToMoraleMult, DefectThresholdOffset, DefenseMult, DeployCostMult, DeploymentZoneMinExtend, DeploymentZoneMult, Detection, DetectionMult, Discipline, DisciplineMult, DismemberChance, ElementsHit, ElementsHitPct, GetDismemberedChanceBonus, GetDismemberedChanceMult, GetDismemberedMaxParts, GetDismemberedMinParts, HitchanceMin, HitpointsPerElement, HitpointsPerElementMult, IgnoreCoverMult, MaxElements, MoraleBonus, MoraleImpactMult, MoraleMult, MoraleRecoveryMult, MoraleStateOffset, PromotionCostMult, ProvidedCoverBonus, ReduceElementsHit, SuppressionDealt, SuppressionDealtMult, SuppressionImpactMult, TotalDamageMult, Vision, VisionMult |
TooltipPlaceholderIndex | int | |
Trigger | UpdateEvent | OnBeforeAnySkillUsed, OnBeingAttacked, OnUpdate |
ValueProvider | IValueProvider | C# only (Odin-routed): set in your handler in C#, see Conditions. |
ChangePropertyAura
| Field | Type | Values / notes |
|---|---|---|
Properties | PropertyChange[] | |
Radius | int | |
ReducesWithDistance | bool |
ChangePropertyConditional
| Field | Type | Values / notes |
|---|---|---|
Condition | ITacticalCondition | C# only (Odin-routed): set in your handler in C#, see Conditions. |
Event | EventType | OnBeforeAnySkillUsed, OnUpdate |
HideIfNotActive | bool | |
Properties | PropertyChange[] |
ChangePropertyConsecutive
| Field | Type | Values / notes |
|---|---|---|
Amount | int | |
AmountMult | float | |
MaxStacks | int | |
PropertyType | EntityPropertyType | AIPriorityMult, APEnterCost, APLeaveCost, Accuracy, AccuracyDropoff, AccuracyDropoffMult, AccuracyMult, ActionPoints, ActionPointsMult, AdditionalMovementCost, AdditionalTurningCost, Armor, ArmorDurabilityPerElement, ArmorMult, ArmorPenetration, ArmorPenetrationDropoff, ArmorPenetrationDropoffMult, ArmorPenetrationMult, BackwardsMovementMult, Concealment, ConcealmentMult, CoverEffectivenessMult, CoverGainedByVehicleOffset, CoverTypeOffset, CriticalChance, CriticalDamageMult, Damage, DamageDropoff, DamageDropoffMult, DamageMult, DamageSustainedMult, DamageSustainedSquadLeaderMult, DamageToArmorDurability, DamageToArmorDurabilityDropoff, DamageToArmorDurabilityDropoffMult, DamageToArmorDurabilityMult, DamageToMoraleMult, DefectThresholdOffset, DefenseMult, DeployCostMult, DeploymentZoneMinExtend, DeploymentZoneMult, Detection, DetectionMult, Discipline, DisciplineMult, DismemberChance, ElementsHit, ElementsHitPct, GetDismemberedChanceBonus, GetDismemberedChanceMult, GetDismemberedMaxParts, GetDismemberedMinParts, HitchanceMin, HitpointsPerElement, HitpointsPerElementMult, IgnoreCoverMult, MaxElements, MoraleBonus, MoraleImpactMult, MoraleMult, MoraleRecoveryMult, MoraleStateOffset, PromotionCostMult, ProvidedCoverBonus, ReduceElementsHit, SuppressionDealt, SuppressionDealtMult, SuppressionImpactMult, TotalDamageMult, Vision, VisionMult |
ChangePropertyTarget
| Field | Type | Values / notes |
|---|---|---|
OnlyForThisSkill | bool | |
Properties | PropertyChange[] |
ChangeRangesOfSkillsWithTags
| Field | Type | Values / notes |
|---|---|---|
IdealRangeChange | int | |
IdealRangeMult | float | |
MaxRangeChange | int | |
MaxRangeMult | float | |
MinRangeChange | int | |
MinRangeMult | float | |
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
ChangeSkillUseAmount
| Field | Type | Values / notes |
|---|---|---|
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
UsesAmount | int |
ChangeSkillsWithTags
| Field | Type | Values / notes |
|---|---|---|
Amount | int | |
AmountMult | float | |
PropertyType | EntityPropertyType | AIPriorityMult, APEnterCost, APLeaveCost, Accuracy, AccuracyDropoff, AccuracyDropoffMult, AccuracyMult, ActionPoints, ActionPointsMult, AdditionalMovementCost, AdditionalTurningCost, Armor, ArmorDurabilityPerElement, ArmorMult, ArmorPenetration, ArmorPenetrationDropoff, ArmorPenetrationDropoffMult, ArmorPenetrationMult, BackwardsMovementMult, Concealment, ConcealmentMult, CoverEffectivenessMult, CoverGainedByVehicleOffset, CoverTypeOffset, CriticalChance, CriticalDamageMult, Damage, DamageDropoff, DamageDropoffMult, DamageMult, DamageSustainedMult, DamageSustainedSquadLeaderMult, DamageToArmorDurability, DamageToArmorDurabilityDropoff, DamageToArmorDurabilityDropoffMult, DamageToArmorDurabilityMult, DamageToMoraleMult, DefectThresholdOffset, DefenseMult, DeployCostMult, DeploymentZoneMinExtend, DeploymentZoneMult, Detection, DetectionMult, Discipline, DisciplineMult, DismemberChance, ElementsHit, ElementsHitPct, GetDismemberedChanceBonus, GetDismemberedChanceMult, GetDismemberedMaxParts, GetDismemberedMinParts, HitchanceMin, HitpointsPerElement, HitpointsPerElementMult, IgnoreCoverMult, MaxElements, MoraleBonus, MoraleImpactMult, MoraleMult, MoraleRecoveryMult, MoraleStateOffset, PromotionCostMult, ProvidedCoverBonus, ReduceElementsHit, SuppressionDealt, SuppressionDealtMult, SuppressionImpactMult, TotalDamageMult, Vision, VisionMult |
RequiredTags | TagType[] |
ChangeStance
| Field | Type | Values / notes |
|---|---|---|
ChangeStanceTo | ActorStance | Default, Deployed, PinnedDown |
IsStanceRequiredToUse | bool | |
RequiredStance | ActorStance | Default, Deployed, PinnedDown |
ChangeSupplyCosts
| Field | Type | Values / notes |
|---|---|---|
CostMult | float | |
Filter | IItemFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
ChangeSuppression
| Field | Type | Values / notes |
|---|---|---|
Event | EventType | OnAdded, OnUse |
SuppressionChange | float |
ChangeUsesPerSquaddie
| Field | Type | Values / notes |
|---|---|---|
AmountPerElement | int | |
MaxIncreasePct | int | |
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
Charge
| Field | Type | Values / notes |
|---|---|---|
HideIfNotUsable | bool |
ChargeInfantry
| Field | Type | Values / notes |
|---|---|---|
EffectToApply | SkillTemplate | |
HideIfNotUsable | bool |
ClearTileEffect
| Field | Type | Values / notes |
|---|---|---|
ChanceAtCenter | int | |
ChanceDropoffWithDistance | int | |
EffectToClear | TileEffectTemplate |
ClearTileEffectGroup
| Field | Type | Values / notes |
|---|---|---|
EffectsToClear | TileEffectGroup | |
TriggerEffect | bool |
CommandMove
| Field | Type | Values / notes |
|---|---|---|
Minion | MinionType | AttackDrone, None, ReconDrone, SuicideDrone |
CommandUseSkill
| Field | Type | Values / notes |
|---|---|---|
Minion | MinionType | AttackDrone, None, ReconDrone, SuicideDrone |
SkillToUse | SkillTemplate |
CompleteSecondaries
| Field | Type | Values / notes |
|---|---|---|
Amount | int |
ConsumeOnSkillUse
| Field | Type | Values / notes |
|---|---|---|
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
Cooldown
| Field | Type | Values / notes |
|---|---|---|
AIOnly | bool | |
RoundsToCoolDown | int |
CounterAttack
| Field | Type | Values / notes |
|---|---|---|
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
Crawl
No settable fields. It carries behaviour only.
CutFence
| Field | Type | Values / notes |
|---|---|---|
AffectedHalfCovers | HalfCoverTemplate[] |
Damage
| Field | Type | Values / notes |
|---|---|---|
ArmorPenetration | float | |
DamageFlatAmount | float | |
DamagePctCurrentHitpoints | float | |
DamagePctCurrentHitpointsMin | float | |
DamagePctMaxHitpoints | float | |
DamagePctMaxHitpointsMin | float | |
DamageToArmorDurability | float | |
DamageVisualizationType | DamageVisualizationType | Bullet, Burn, COUNT |
DismemberArea | RagdollHitArea | Antennas, Any, Arms, Heads, Legs, Tails, Torso |
DismemberChance | int | |
ElementsHit | int | |
ElementsHitPercentage | float | |
FatalityType | FatalityType | Burning, Default, Explosion, Laser, Plasma |
InflictDefects | bool | |
IsAppliedOnlyToPassengers | bool |
DamageArmorDurability
| Field | Type | Values / notes |
|---|---|---|
DamageFlatAmount | float | |
DamagePercentageOfCurrentDurability | float | |
DamagePercentageOfMaxDurability | float |
DamageOverTime
| Field | Type | Values / notes |
|---|---|---|
ArmorPenetration | float | |
DamageArmorFlatAmount | float | |
DamageArmorPctOfCurrent | float | |
DamageArmorPctOfMax | float | |
DamagePctCurrentHitpoints | float | |
DamagePctCurrentHitpointsMin | float | |
DamagePctMaxHitpoints | float | |
DamagePctMaxHitpointsMin | float | |
DamagePerTurn | float | |
DamageToArmorDurability | float | |
DamageVisualizationType | DamageVisualizationType | Bullet, Burn, COUNT |
DamagesArmorFirst | bool | |
ElementsHit | int | |
ElementsHitPercentage | float | |
FatalityType | FatalityType | Burning, Default, Explosion, Laser, Plasma |
InflictDefects | bool |
Deathrattle
| Field | Type | Values / notes |
|---|---|---|
Chance | int | |
Skill | SkillTemplate | |
TriggerForEachElement | bool |
DelayTurn
No settable fields. It carries behaviour only.
DeployHeavyWeapon
No settable fields. It carries behaviour only.
DestroyEnvironmentFeatures
No settable fields. It carries behaviour only.
DestroyProps
| Field | Type | Values / notes |
|---|---|---|
Mode | TileMode | AllTiles, CenterTileOnly |
Radius | float |
DestroyWreckage
| Field | Type | Values / notes |
|---|---|---|
SpawnDecoPrefab | GameObject |
DirectHpChange
| Field | Type | Values / notes |
|---|---|---|
HpPercentage | float |
DisableByFlag
| Field | Type | Values / notes |
|---|---|---|
Flag | EntityFlags | CantEnterContainers, DesignatedTarget, HeavyWeaponsAllowed, IgnoreArmorMovementCosts, IgnoreDeploymentRequirements, IgnoreSuppressedAPLoss, ImmuneDesignatedTarget, ImmuneToDamage, ImmuneToIndirectSuppression, ImmuneToLightEffect, ImmuneToMorale, ImmuneToSuppression, ImmuneToSuppressionFromElementLost, IrrelevantToMorale, None, Rooted, RootedByStance, Stunned |
DisableItem
| Field | Type | Values / notes |
|---|---|---|
ForbiddenLogic | LogicType | And, Or |
ForbiddenTags | List<TagTemplate> | |
RequiredLogic | LogicType | And, Or |
RequiredTags | List<TagTemplate> |
DisableSkills
| Field | Type | Values / notes |
|---|---|---|
HideDisabledSkills | bool | |
MarkAsDestroyed | bool | |
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
DisallowInvisible
No settable fields. It carries behaviour only.
DisplayText
| Field | Type | Values / notes |
|---|---|---|
DefaultText | string | |
Event | DisplayEvent | OnAdded, OnApply, OnUse, Triggered |
Icon | Sprite | |
LocaKey | string |
DivineIntervention
No settable fields. It carries behaviour only.
DropRecoverableObject
| Field | Type | Values / notes |
|---|---|---|
ObjectTileEffect | RecoverableObjectTileEffect | |
ObjectUnitHUDIcon | Sprite |
EjectEntity
| Field | Type | Values / notes |
|---|---|---|
ConferSkillToEjectedEntity | SkillTemplate | |
IsSpecialAIVersion | bool |
EmitAura
| Field | Type | Values / notes |
|---|---|---|
ExcludeSelf | bool | |
SkillToAdd | SkillTemplate |
EnemiesDropPickupOnDeath
| Field | Type | Values / notes |
|---|---|---|
Pickup | TileEffectTemplate | |
SpawnDelay | float |
EvacuateLeader
No settable fields. It carries behaviour only.
ExtraTickets
| Field | Type | Values / notes |
|---|---|---|
ExtraTicketAmount | int |
FilterByCondition
| Field | Type | Values / notes |
|---|---|---|
Condition | ITacticalCondition | C# only (Odin-routed): set in your handler in C#, see Conditions. |
FilterByMorale
| Field | Type | Values / notes |
|---|---|---|
AppliesOnlyToState | MoraleState | Fleeing, Neutral, Wavering |
FilterByOtherSkills
| Field | Type | Values / notes |
|---|---|---|
NotEnabledIfActorHasSkillWithTags | TagType[] |
FilterByStance
| Field | Type | Values / notes |
|---|---|---|
AppliesOnlyToStance | ActorStance | Default, Deployed, PinnedDown |
GainActionPoints
| Field | Type | Values / notes |
|---|---|---|
ActionPoints | int | |
AlwaysIncreaseMaxActionPoints | bool |
GainEffectOnSkillUse
| Field | Type | Values / notes |
|---|---|---|
Effect | SkillTemplate | |
RemoveOnUse | bool | |
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
GrantBonusTurn
| Field | Type | Values / notes |
|---|---|---|
ActionPointsAvailable | float |
HandleLeaderAttributes
No settable fields. It carries behaviour only.
HeatCapacity
| Field | Type | Values / notes |
|---|---|---|
HeatDissipationPerTurn | int | |
HeatPerUse | int | |
IsSynchronizedWithOtherSkillsOfTheSameItem | bool | |
MaxHeat | int | |
OverheatingSound | ID |
HideByCondition
| Field | Type | Values / notes |
|---|---|---|
Condition | ITacticalCondition | C# only (Odin-routed): set in your handler in C#, see Conditions. |
Hitchance
| Field | Type | Values / notes |
|---|---|---|
AccuracyBonus | float | |
AccuracyDropoff | float | |
AccuracyDropoffMult | float | |
AccuracyMult | float |
IgnoreDamage
| Field | Type | Values / notes |
|---|---|---|
AbsorbDamagePct | int | |
ChanceToApply | int | |
RequiredTags | TagType[] |
InterceptAPChange
| Field | Type | Values / notes |
|---|---|---|
ActionPointPercentage | int | |
AppliesTo | SkillTemplate | |
TriggerOnlyOncePerRound | bool |
InterceptDeath
| Field | Type | Values / notes |
|---|---|---|
Effect | SkillTemplate |
Jamming
| Field | Type | Values / notes |
|---|---|---|
BaseChance | int | |
ChancePerUse | int | |
JammingSound | ID |
JetPack
| Field | Type | Values / notes |
|---|---|---|
DelayBeforeJump | float | |
Duration | float | |
ForwardCurve | AnimationCurve | |
HeightCurve | AnimationCurve | |
HeightPerUnitOfDistance | float | |
MaxHeight | float | |
StartTrigger | AnimatorParameterNameTemplate |
JumpIntoMelee
| Field | Type | Values / notes |
|---|---|---|
Animation | AnimationType | Attack, Jump, None, ShootBurst, ShootSingle, SpecialAttack1, SpecialAttack2, SpecialAttack3, SpecialAttack4, ThrowGrenade, UNUSED_ThrowClose |
CameraEffectOnTakeoff | CameraEffectType | HeavyQuake, LightQuake, MoveXZ, MoveY, None |
DelayBeforeJump | float | |
DistanceFromTarget | float | |
DurationPerUnitOfDistance | float | |
ForwardCurve | AnimationCurve | |
HeightCurve | AnimationCurve | |
HeightPerUnitOfDistance | float | |
MaxDuration | float | |
MaxHeight | float |
LifetimeLimit
| Field | Type | Values / notes |
|---|---|---|
Event | LifetimeType | OnAdded, OnAfterUse, OnEffectApplied, OnRoundStart, OnTurnEnd, OnTurnStart |
Lifetime | int | |
ResetLifetimeOnRefresh | bool |
LimitMaxHpLoss
| Field | Type | Values / notes |
|---|---|---|
MaxHpPct | float |
LimitUsability
| Field | Type | Values / notes |
|---|---|---|
HiddenIfActorHasSkill | List<SkillTemplate> | |
NotHiddenIfActorHasSkill | List<SkillTemplate> | |
NotUsableIfActorHasSkill | List<SkillTemplate> | |
OnlyUsableIfActorHasSkill | List<SkillTemplate> |
LimitedPassiveUses
| Field | Type | Values / notes |
|---|---|---|
MaxUses | int |
ModularVehicleSkill
| Field | Type | Values / notes |
|---|---|---|
RequiredWeaponCount | WeaponCount | Single, Twinfire |
MoraleOverMaxEffect
| Field | Type | Values / notes |
|---|---|---|
Effect | SkillTemplate |
MoveAndSelfDestroy
| Field | Type | Values / notes |
|---|---|---|
AdditionalDelay | float | |
AfterMoveTrigger | AnimatorParameterNameTemplate | |
StartMoveTrigger | AnimatorParameterNameTemplate |
MovedNextToEnemy
| Field | Type | Values / notes |
|---|---|---|
Effect | SkillTemplate |
NothingPersonal
| Field | Type | Values / notes |
|---|---|---|
Effect | SkillTemplate | |
Range | int |
OnElementKilled
| Field | Type | Values / notes |
|---|---|---|
Amount | int | |
ApplyEffect | Effect | ReduceSuppression |
DisplayText | bool |
OverrideVolumeProfile
| Field | Type | Values / notes |
|---|---|---|
DesertProfile | VolumeProfile | |
FallbackProfile | VolumeProfile | |
SnowProfile | VolumeProfile | |
TemperateProfile | VolumeProfile |
Overtime
| Field | Type | Values / notes |
|---|---|---|
HpThreshold | float |
PlayAnimationSequence
| Field | Type | Values / notes |
|---|---|---|
Animation | AnimationSequenceTemplate |
PlaySound
| Field | Type | Values / notes |
|---|---|---|
Event | PlaySoundEventType | OnAdded, OnEffectApplied, OnRoundStart, OnTurnEnd, OnTurnStart |
SoundToPlay | ID | |
Volume | float |
PlaySoundOnEnabled
| Field | Type | Values / notes |
|---|---|---|
SoundToPlay | ID | |
Volume | float |
PurgeSkill
| Field | Type | Values / notes |
|---|---|---|
Skill | SkillTemplate |
Rally
No settable fields. It carries behaviour only.
RecallTarget
| Field | Type | Values / notes |
|---|---|---|
UseLastTargetOfSkill | SkillTemplate |
ReduceArmor
| Field | Type | Values / notes |
|---|---|---|
MaxReduction | float | |
ReductionPerStack | float |
RefillAmmo
| Field | Type | Values / notes |
|---|---|---|
RestoreMinimum | int | |
RestorePct | float | |
SkillFilter | ISkillFilter | C# only (Odin-routed): set in your handler in C#, see Conditions. |
RefillSquaddies
| Field | Type | Values / notes |
|---|---|---|
Animation | AnimationSequenceTemplate |
Regeneration
| Field | Type | Values / notes |
|---|---|---|
Effect | GameObject | |
Event | ApplyOnEvent | OnApply, OnTurnEnd, OnTurnStart |
HitpointsHealedPctMax | float | |
Sound | ID |
RemoveDefect
| Field | Type | Values / notes |
|---|---|---|
RequiredType | SkillType | Active, Alert, Background, DamageEffect, Item, LightConditionEffect, MoraleEffect, None, Oci, Offmap, OperationEffect, Perk, PlanetaryEffect, Racial, Special, StatusEffect, Terrain, Trait, WeatherEffect, WorldEvent |
RemoveSkill
| Field | Type | Values / notes |
|---|---|---|
Event | RemoveTrigger | OnAdded, OnApply, OnRemoved, OnUse |
SkillsToRemove | SkillTemplate[] |
ReportAmmoToAnimator
| Field | Type | Values / notes |
|---|---|---|
Parameter | AnimatorParameterNameTemplate |
Rescue
No settable fields. It carries behaviour only.
RestoreArmorDurability
| Field | Type | Values / notes |
|---|---|---|
RestorePercent | int |
ReturnOfServe
| Field | Type | Values / notes |
|---|---|---|
ConsumedOnTrigger | bool |
Scanner
| Field | Type | Values / notes |
|---|---|---|
AIEffectToEnemies | SkillTemplate | |
Blip | GameObject | |
DetectsInfantry | bool | |
DetectsVehicles | bool | |
Range | int | |
ScanSpeed | float | |
Scanline | GameObject |
SetAnimatorBool
| Field | Type | Values / notes |
|---|---|---|
Parameter | AnimatorParameterNameTemplate |
SetAnimatorTrigger
| Field | Type | Values / notes |
|---|---|---|
Delay | float | |
Parameter | AnimatorParameterNameTemplate |
SetEntityFlag
| Field | Type | Values / notes |
|---|---|---|
Flag | EntityFlags | CantEnterContainers, DesignatedTarget, HeavyWeaponsAllowed, IgnoreArmorMovementCosts, IgnoreDeploymentRequirements, IgnoreSuppressedAPLoss, ImmuneDesignatedTarget, ImmuneToDamage, ImmuneToIndirectSuppression, ImmuneToLightEffect, ImmuneToMorale, ImmuneToSuppression, ImmuneToSuppressionFromElementLost, IrrelevantToMorale, None, Rooted, RootedByStance, Stunned |
SetUsesPerElement
| Field | Type | Values / notes |
|---|---|---|
UsesPerElement | int |
ShowHUDIcon
| Field | Type | Values / notes |
|---|---|---|
IconToShow | Icon | None, TargetDesignated |
ShowIsolatedIcon
| Field | Type | Values / notes |
|---|---|---|
Radius | int |
ShowUnitHUDIcon
| Field | Type | Values / notes |
|---|---|---|
Conditions | ITacticalCondition[] | |
Icon | Sprite | |
Target | TargetUnit | AllEnemies, Self |
SpawnEntity
| Field | Type | Values / notes |
|---|---|---|
AlignSpawnDirection | bool | |
EntityToSpawn | EntityTemplate | |
FactionType | FactionType | AlliedLocalForces, Civilian, Constructs, EnemyLocalForces, Neutral, Pirates, Player, PlayerAI, RogueArmy, Wildlife |
HideIfSpawnLimitReached | bool | |
OverrideFaction | bool | |
SetParameterOnSpawn | AnimatorParameterNameTemplate | |
SkipFirstTurnForSpawnedEntity | bool | |
SpawnAsMinion | MinionType | AttackDrone, None, ReconDrone, SuicideDrone |
SpawnLimit | int | |
Trigger | SpawnTrigger | OnTileHit, OnUse |
SpawnGore
| Field | Type | Values / notes |
|---|---|---|
Amount | int | |
Distance | float | |
MinMaxScale | Vector2 | |
Prefabs | PrefabListTemplate |
SpawnHalfCover
| Field | Type | Values / notes |
|---|---|---|
CoverConfig | CoverConfig |
SpawnPrefab
| Field | Type | Values / notes |
|---|---|---|
Prefab | GameObject |
SpawnTileEffect
| Field | Type | Values / notes |
|---|---|---|
CanHitStructures | bool | |
ChanceAtCenter | int | |
ChancePerTileFromCenter | int | |
DelayWithDistance | float | |
EffectToSpawn | TileEffectTemplate | |
Event | ApplyOnEvent | OnDeath, OnTileChanged, OnUse |
SpawnTileEffectOnAttacked
| Field | Type | Values / notes |
|---|---|---|
EffectToSpawn | TileEffectTemplate | |
Radius | int |
StanceDeployed
| Field | Type | Values / notes |
|---|---|---|
Properties | PropertyChange[] |
StopBleedout
No settable fields. It carries behaviour only.
SuicideDrone
No settable fields. It carries behaviour only.
Suppression
| Field | Type | Values / notes |
|---|---|---|
PinnedDownEffect | SkillTemplate | |
SoundWhenPinnedDown | ID | |
SoundWhenSuppressed | ID |
SuppressionConstruct
| Field | Type | Values / notes |
|---|---|---|
PinnedDownEffect | SkillTemplate | |
PinnedDownText | string | |
SoundWhenPinnedDown | ID |
SwitchBetweenSkills
| Field | Type | Values / notes |
|---|---|---|
DisplayAOEAreaOfAlternateSkill | bool | |
IsVisibleAtStart | bool | |
Mode | DeactivateMode | Disable, Hide |
SwitchToAlternativeItemIcon | bool | |
SwitchWithSkill | SkillTemplate |
SynchronizeItemUses
No settable fields. It carries behaviour only.
ThrivingUnderPressure
| Field | Type | Values / notes |
|---|---|---|
RequiredStacksForUse | int |
ToggleSkills
| Field | Type | Values / notes |
|---|---|---|
ActiveSkills | SkillTemplate[] |
TriggerSkillOnHpLost
| Field | Type | Values / notes |
|---|---|---|
CanOnlyTriggerOncePerRound | bool | |
HpThreshold | int | |
SkillToTrigger | SkillTemplate |
UseSkill
| Field | Type | Values / notes |
|---|---|---|
Event | ApplyOnEvent | OnAdded |
SkillToUse | SkillTemplate |
VaultModeOverride
| Field | Type | Values / notes |
|---|---|---|
VaultMode | VaultMode | Destroy, None, OnlyTrigger, RootMotion |
VehicleMovement
| Field | Type | Values / notes |
|---|---|---|
Concealment | int |
VehicleRotation
No settable fields. It carries behaviour only.
VentHeat
| Field | Type | Values / notes |
|---|---|---|
VentForSkill | SkillTemplate |
VerifyByCondition
| Field | Type | Values / notes |
|---|---|---|
Condition | ITacticalCondition | C# only (Odin-routed): set in your handler in C#, see Conditions. |
Conditions
The game models these reusable conditions (TacticalCondition subtypes). They live in handler fields typed ITacticalCondition, which are Odin-routed, so KDL cannot set a condition (those fields are marked C# only above). To gate a handler on a condition, write the handler in C# and put the check in the override body. The conditions the game already models:
ActorTypeConditionCoverConditionDisabledOrStunnedConditionDistanceConditionElementCountConditionElementsHitConditionEntityTypeConditionEntityWithOneOfTheTagsConditionEntityWithTagsConditionFactionConditionHasAnySkillConditionHasBeenAttackedThisRoundConditionHasDefectConditionHasFlagConditionHasItemInSlotConditionHasItemWithSlotConditionHasItemWithTagsConditionHasSpecificVehicleConditionHitpointsPercentageConditionImmuneToMoraleConditionIsContainingEntityConditionIsDeployedConditionIsHiddenConditionIsObjectiveTargetConditionIsUsingSkillInSlotConditionIsVehicleConditionIsolatedConditionLastAttackedByConditionLightConditionMoralePercentConditionMoraleStateConditionSkillWithOneOfTheTagsConditionSkillWithTagsConditionSpecificSkillConditionStationaryConditionStructureTypeConditionSuppressionCondition
Value providers
A value provider computes a number for a handler field typed IValueProvider (for example ChangeProperty.ValueProvider). These are Odin-routed too, so they are C# only. The providers the game ships:
AdjacentInfantryProviderAttackedThisRoundValueProviderDistanceValueProviderEnemiesKilledProviderMissingHealthProviderProximityValueProviderRoundValueProviderSquadSizeProviderTilesMovedProviderWrecksDestroyedProvider