Skip to content

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 SkillEventHandlerTemplate and SkillEventHandler and 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.

kdl
append "EventHandlers" type="AddSkill" {
    set "Event" enum="AddEvent" "OnAttack"
    set "SkillToAdd" ref="SkillTemplate" "effect.bleeding"
}

AccuracyStacks

FieldTypeValues / notes
AccuracyPerStackint
IsSynchronizedWithOtherSkillsOfTheSameItembool
MaxStacksint
MinStacksint
StacksOnRoundStartint
StacksOnUseint

AddItemSlot

FieldTypeValues / notes
Amountint
SlotTypeItemSlotAll, COUNT, InfantryAccessory, InfantryArmor, InfantrySpecial, InfantryWeapon, ModularVehicleHeavy, ModularVehicleLight, ModularVehicleMedium, None, Vehicle, VehicleAccessory, VehicleHeavyTurret, VehicleLightTurret

AddSkill

FieldTypeValues / notes
ConditionITacticalConditionC# only (Odin-routed): set in your handler in C#, see Conditions.
EventAddEventOnAdded, OnAttack, OnElementDeath, OnMissionStart, OnRemoved, OnRoundStart, OnTargetElementDestroyed, OnUse
OnlyApplyOnHitbool
OnlyApplyOnHitpointDamagebool
OnlyApplyWhenNoElementWasDestroyedbool
OnlyUsableOnTargetsWithoutSkillbool
OnlyWhenSkillNotPresentbool
ShowHUDTextbool
SkillToAddSkillTemplate
TagsCanPreventSkillUsebool
TargetCannotHaveOneOfTheseTagsList<TagTemplate>
TargetRequiresOneOfTheseTagsList<TagTemplate>

AddSkillAfterMovement

FieldTypeValues / notes
EffectSkillTemplate

AddSkillOnUse

FieldTypeValues / notes
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.
SkillToAddSkillTemplate

AddSkillRescuedUnit

FieldTypeValues / notes
EffectSkillTemplate

AmmoPouch

FieldTypeValues / notes
ApplyToTypeItemTypeAccessory, Armor, None, Weapon
BonusPercentagefloat
MinimumBonusint
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

ApplyAuthorityDisciplineMod

FieldTypeValues / notes
DisciplineModMultfloat

ApplySkillToSelf

FieldTypeValues / notes
ChanceToApplyint
EventApplyOnEventOnAdded, OnRoundEnd, OnRoundStart, OnSkillWithTagsUsed, OnTurnEnd, OnTurnStart
RequiredLogicLogicTypeAnd, Or
RequiredTagsList<TagTemplate>
SkillToApplySkillTemplate

Arcing

FieldTypeValues / notes
ArcingSkillSkillTemplate
MaxBouncesint
Radiusint

AttachObject

FieldTypeValues / notes
AttachAtAttachmentPointCenter, Damage, Damage2, Spine
AttachAtInfantryAttachmentPointCenter, Damage, Damage2, Spine
ObjectToAttachGameObject

AttachObjectWhileActive

FieldTypeValues / notes
PrefabGameObject

AttachTemporaryPrefab

FieldTypeValues / notes
AttachmentSlotVisualAlterationSlotAnimation, Back, Back_Special, EntireModel, Hand_L, Hand_L_Special, Hand_R, Hand_R_Special, Last, Mount01, Mount02, Mount03, None, Torso, Turret
CancelDelayfloat
LocalOffsetVector3
LocalRotationVector3
LocalScaleVector3
PrefabGameObject

Attack

FieldTypeValues / notes
AccuracyBonusfloat
AccuracyDropofffloat
AccuracyDropoffMultfloat
AccuracyMultfloat
ApplyModeApplicationModeAutomatic, Manual
ArmorPenetrationfloat
ArmorPenetrationDropofffloat
ArmorPenetrationDropoffAOEfloat
ArmorPenetrationDropoffMultfloat
ArmorPenetrationMultfloat
Damagefloat
DamageDropofffloat
DamageDropoffAOEfloat
DamageDropoffMultfloat
DamageFilterConditionITacticalConditionC# only (Odin-routed): set in your handler in C#, see Conditions.
DamageMultfloat
DamagePctCurrentHitpointsfloat
DamagePctCurrentHitpointsMinfloat
DamagePctMaxHitpointsfloat
DamagePctMaxHitpointsMinfloat
DamageToArmorDurabilityfloat
DamageToArmorDurabilityDropofffloat
DamageToArmorDurabilityDropoffAOEfloat
DamageToArmorDurabilityDropoffMultfloat
DamageToArmorDurabilityMultfloat
DamageVisualizationTypeDamageVisualizationTypeBullet, Burn, COUNT
DestroyHalfCoverHalfCoverClassHeavy, Light, Medium, None
DismemberAreaRagdollHitAreaAntennas, Any, Arms, Heads, Legs, Tails, Torso
DismemberChanceint
ElementsHitint
ElementsHitPercentagefloat
EntityFlagsRequiredEntityFlagsCantEnterContainers, DesignatedTarget, HeavyWeaponsAllowed, IgnoreArmorMovementCosts, IgnoreDeploymentRequirements, IgnoreSuppressedAPLoss, ImmuneDesignatedTarget, ImmuneToDamage, ImmuneToIndirectSuppression, ImmuneToLightEffect, ImmuneToMorale, ImmuneToSuppression, ImmuneToSuppressionFromElementLost, IrrelevantToMorale, None, Rooted, RootedByStance, Stunned
FatalityTypeFatalityTypeBurning, Default, Explosion, Laser, Plasma
IsHalfCoverDestroyedOnAOECenterTileOnlybool
Suppressionfloat
SuppressionDealtMultfloat
SuppressionDropoffAOEfloat
TargetCannotHaveOneOfTheseTagsList<TagTemplate>
TargetRequiresOneOfTheseTagsList<TagTemplate>

AttackMorale

FieldTypeValues / notes
MoraleDamageint
MoraleStateReductionint

AttackOrder

FieldTypeValues / notes
ActionPointsint
EffectSkillTemplate

AttackProc

FieldTypeValues / notes
CanBeTriggeredByAnySkillbool
Chanceint
ConditionITacticalConditionC# only (Odin-routed): set in your handler in C#, see Conditions.
OnlyApplyOnHitpointDamagebool
OnlyApplyWhenNoElementWasDestroyedbool
ShowHUDTextbool
SkillToAddSkillTemplate

Berserk

FieldTypeValues / notes
ActionPointsint
ConsumedOnTriggerbool

Buyout

FieldTypeValues / notes
EntityToSpawnEntityTemplate
FactionFactionTypeAlliedLocalForces, Civilian, Constructs, EnemyLocalForces, Neutral, Pirates, Player, PlayerAI, RogueArmy, Wildlife
OverlayIconSprite
WhitelistEntityTemplate[]

CameraShake

FieldTypeValues / notes
CameraEffectCameraEffectTypeHeavyQuake, LightQuake, MoveXZ, MoveY, None
Durationfloat
Intensityfloat
RecoverTimefloat

CauseDefect

FieldTypeValues / notes
SeverityDefectSeverityHeavy, Light, Medium

ChangeAPBasedOnHP

FieldTypeValues / notes
ThresholdsHpThreshold[]

ChangeActionPointCost

FieldTypeValues / notes
CostDeltaint
CostMinint
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

ChangeActionPoints

FieldTypeValues / notes
ActionPointsint
ForceTurnToEndbool

ChangeAttackCost

FieldTypeValues / notes
CostPerAttackint
CostPerAttackMultfloat

ChangeDropChance

FieldTypeValues / notes
AdditionalDropChanceint

ChangeFaction

FieldTypeValues / notes
FactionFactionTypeAlliedLocalForces, Civilian, Constructs, EnemyLocalForces, Neutral, Pirates, Player, PlayerAI, RogueArmy, Wildlife

ChangeGrowthPotential

FieldTypeValues / notes
Deltaint

ChangeHeatCapacity

FieldTypeValues / notes
HeatDissipationPerTurnint
HeatPerUseint
MaxHeatint

ChangeMalfunctionChance

FieldTypeValues / notes
ApplyOnlyToSkillSkillTemplate
ApplyToApplyTypeAllAttacks, AllSkills, SpecificSkill, ThisSkill
BaseMalfunctionChanceint
MalfunctionChancePerUseint
ResetMalfunctionChancebool

ChangeMorale

FieldTypeValues / notes
ChangeIfChangeConditionAlways, CurrentMoraleIsHigher, CurrentMoraleIsLower
ChangeMoraleToMoraleStateFleeing, Neutral, Wavering
EventEventTypeOnAdded, OnApply

ChangeMovementCost

FieldTypeValues / notes
CostForTurningint
CostPerSurfaceInt32[]
CostPerTileint
IsRootedbool

ChangeProperty

FieldTypeValues / notes
Amountint
AmountMultfloat
IncludePlusSignbool
PropertyTypeEntityPropertyTypeAIPriorityMult, 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
TooltipPlaceholderIndexint
TriggerUpdateEventOnBeforeAnySkillUsed, OnBeingAttacked, OnUpdate
ValueProviderIValueProviderC# only (Odin-routed): set in your handler in C#, see Conditions.

ChangePropertyAura

FieldTypeValues / notes
PropertiesPropertyChange[]
Radiusint
ReducesWithDistancebool

ChangePropertyConditional

FieldTypeValues / notes
ConditionITacticalConditionC# only (Odin-routed): set in your handler in C#, see Conditions.
EventEventTypeOnBeforeAnySkillUsed, OnUpdate
HideIfNotActivebool
PropertiesPropertyChange[]

ChangePropertyConsecutive

FieldTypeValues / notes
Amountint
AmountMultfloat
MaxStacksint
PropertyTypeEntityPropertyTypeAIPriorityMult, 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

FieldTypeValues / notes
OnlyForThisSkillbool
PropertiesPropertyChange[]

ChangeRangesOfSkillsWithTags

FieldTypeValues / notes
IdealRangeChangeint
IdealRangeMultfloat
MaxRangeChangeint
MaxRangeMultfloat
MinRangeChangeint
MinRangeMultfloat
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

ChangeSkillUseAmount

FieldTypeValues / notes
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.
UsesAmountint

ChangeSkillsWithTags

FieldTypeValues / notes
Amountint
AmountMultfloat
PropertyTypeEntityPropertyTypeAIPriorityMult, 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
RequiredTagsTagType[]

ChangeStance

FieldTypeValues / notes
ChangeStanceToActorStanceDefault, Deployed, PinnedDown
IsStanceRequiredToUsebool
RequiredStanceActorStanceDefault, Deployed, PinnedDown

ChangeSupplyCosts

FieldTypeValues / notes
CostMultfloat
FilterIItemFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

ChangeSuppression

FieldTypeValues / notes
EventEventTypeOnAdded, OnUse
SuppressionChangefloat

ChangeUsesPerSquaddie

FieldTypeValues / notes
AmountPerElementint
MaxIncreasePctint
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

Charge

FieldTypeValues / notes
HideIfNotUsablebool

ChargeInfantry

FieldTypeValues / notes
EffectToApplySkillTemplate
HideIfNotUsablebool

ClearTileEffect

FieldTypeValues / notes
ChanceAtCenterint
ChanceDropoffWithDistanceint
EffectToClearTileEffectTemplate

ClearTileEffectGroup

FieldTypeValues / notes
EffectsToClearTileEffectGroup
TriggerEffectbool

CommandMove

FieldTypeValues / notes
MinionMinionTypeAttackDrone, None, ReconDrone, SuicideDrone

CommandUseSkill

FieldTypeValues / notes
MinionMinionTypeAttackDrone, None, ReconDrone, SuicideDrone
SkillToUseSkillTemplate

CompleteSecondaries

FieldTypeValues / notes
Amountint

ConsumeOnSkillUse

FieldTypeValues / notes
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

Cooldown

FieldTypeValues / notes
AIOnlybool
RoundsToCoolDownint

CounterAttack

FieldTypeValues / notes
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

Crawl

No settable fields. It carries behaviour only.

CutFence

FieldTypeValues / notes
AffectedHalfCoversHalfCoverTemplate[]

Damage

FieldTypeValues / notes
ArmorPenetrationfloat
DamageFlatAmountfloat
DamagePctCurrentHitpointsfloat
DamagePctCurrentHitpointsMinfloat
DamagePctMaxHitpointsfloat
DamagePctMaxHitpointsMinfloat
DamageToArmorDurabilityfloat
DamageVisualizationTypeDamageVisualizationTypeBullet, Burn, COUNT
DismemberAreaRagdollHitAreaAntennas, Any, Arms, Heads, Legs, Tails, Torso
DismemberChanceint
ElementsHitint
ElementsHitPercentagefloat
FatalityTypeFatalityTypeBurning, Default, Explosion, Laser, Plasma
InflictDefectsbool
IsAppliedOnlyToPassengersbool

DamageArmorDurability

FieldTypeValues / notes
DamageFlatAmountfloat
DamagePercentageOfCurrentDurabilityfloat
DamagePercentageOfMaxDurabilityfloat

DamageOverTime

FieldTypeValues / notes
ArmorPenetrationfloat
DamageArmorFlatAmountfloat
DamageArmorPctOfCurrentfloat
DamageArmorPctOfMaxfloat
DamagePctCurrentHitpointsfloat
DamagePctCurrentHitpointsMinfloat
DamagePctMaxHitpointsfloat
DamagePctMaxHitpointsMinfloat
DamagePerTurnfloat
DamageToArmorDurabilityfloat
DamageVisualizationTypeDamageVisualizationTypeBullet, Burn, COUNT
DamagesArmorFirstbool
ElementsHitint
ElementsHitPercentagefloat
FatalityTypeFatalityTypeBurning, Default, Explosion, Laser, Plasma
InflictDefectsbool

Deathrattle

FieldTypeValues / notes
Chanceint
SkillSkillTemplate
TriggerForEachElementbool

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

FieldTypeValues / notes
ModeTileModeAllTiles, CenterTileOnly
Radiusfloat

DestroyWreckage

FieldTypeValues / notes
SpawnDecoPrefabGameObject

DirectHpChange

FieldTypeValues / notes
HpPercentagefloat

DisableByFlag

FieldTypeValues / notes
FlagEntityFlagsCantEnterContainers, DesignatedTarget, HeavyWeaponsAllowed, IgnoreArmorMovementCosts, IgnoreDeploymentRequirements, IgnoreSuppressedAPLoss, ImmuneDesignatedTarget, ImmuneToDamage, ImmuneToIndirectSuppression, ImmuneToLightEffect, ImmuneToMorale, ImmuneToSuppression, ImmuneToSuppressionFromElementLost, IrrelevantToMorale, None, Rooted, RootedByStance, Stunned

DisableItem

FieldTypeValues / notes
ForbiddenLogicLogicTypeAnd, Or
ForbiddenTagsList<TagTemplate>
RequiredLogicLogicTypeAnd, Or
RequiredTagsList<TagTemplate>

DisableSkills

FieldTypeValues / notes
HideDisabledSkillsbool
MarkAsDestroyedbool
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

DisallowInvisible

No settable fields. It carries behaviour only.

DisplayText

FieldTypeValues / notes
DefaultTextstring
EventDisplayEventOnAdded, OnApply, OnUse, Triggered
IconSprite
LocaKeystring

DivineIntervention

No settable fields. It carries behaviour only.

DropRecoverableObject

FieldTypeValues / notes
ObjectTileEffectRecoverableObjectTileEffect
ObjectUnitHUDIconSprite

EjectEntity

FieldTypeValues / notes
ConferSkillToEjectedEntitySkillTemplate
IsSpecialAIVersionbool

EmitAura

FieldTypeValues / notes
ExcludeSelfbool
SkillToAddSkillTemplate

EnemiesDropPickupOnDeath

FieldTypeValues / notes
PickupTileEffectTemplate
SpawnDelayfloat

EvacuateLeader

No settable fields. It carries behaviour only.

ExtraTickets

FieldTypeValues / notes
ExtraTicketAmountint

FilterByCondition

FieldTypeValues / notes
ConditionITacticalConditionC# only (Odin-routed): set in your handler in C#, see Conditions.

FilterByMorale

FieldTypeValues / notes
AppliesOnlyToStateMoraleStateFleeing, Neutral, Wavering

FilterByOtherSkills

FieldTypeValues / notes
NotEnabledIfActorHasSkillWithTagsTagType[]

FilterByStance

FieldTypeValues / notes
AppliesOnlyToStanceActorStanceDefault, Deployed, PinnedDown

GainActionPoints

FieldTypeValues / notes
ActionPointsint
AlwaysIncreaseMaxActionPointsbool

GainEffectOnSkillUse

FieldTypeValues / notes
EffectSkillTemplate
RemoveOnUsebool
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

GrantBonusTurn

FieldTypeValues / notes
ActionPointsAvailablefloat

HandleLeaderAttributes

No settable fields. It carries behaviour only.

HeatCapacity

FieldTypeValues / notes
HeatDissipationPerTurnint
HeatPerUseint
IsSynchronizedWithOtherSkillsOfTheSameItembool
MaxHeatint
OverheatingSoundID

HideByCondition

FieldTypeValues / notes
ConditionITacticalConditionC# only (Odin-routed): set in your handler in C#, see Conditions.

Hitchance

FieldTypeValues / notes
AccuracyBonusfloat
AccuracyDropofffloat
AccuracyDropoffMultfloat
AccuracyMultfloat

IgnoreDamage

FieldTypeValues / notes
AbsorbDamagePctint
ChanceToApplyint
RequiredTagsTagType[]

InterceptAPChange

FieldTypeValues / notes
ActionPointPercentageint
AppliesToSkillTemplate
TriggerOnlyOncePerRoundbool

InterceptDeath

FieldTypeValues / notes
EffectSkillTemplate

Jamming

FieldTypeValues / notes
BaseChanceint
ChancePerUseint
JammingSoundID

JetPack

FieldTypeValues / notes
DelayBeforeJumpfloat
Durationfloat
ForwardCurveAnimationCurve
HeightCurveAnimationCurve
HeightPerUnitOfDistancefloat
MaxHeightfloat
StartTriggerAnimatorParameterNameTemplate

JumpIntoMelee

FieldTypeValues / notes
AnimationAnimationTypeAttack, Jump, None, ShootBurst, ShootSingle, SpecialAttack1, SpecialAttack2, SpecialAttack3, SpecialAttack4, ThrowGrenade, UNUSED_ThrowClose
CameraEffectOnTakeoffCameraEffectTypeHeavyQuake, LightQuake, MoveXZ, MoveY, None
DelayBeforeJumpfloat
DistanceFromTargetfloat
DurationPerUnitOfDistancefloat
ForwardCurveAnimationCurve
HeightCurveAnimationCurve
HeightPerUnitOfDistancefloat
MaxDurationfloat
MaxHeightfloat

LifetimeLimit

FieldTypeValues / notes
EventLifetimeTypeOnAdded, OnAfterUse, OnEffectApplied, OnRoundStart, OnTurnEnd, OnTurnStart
Lifetimeint
ResetLifetimeOnRefreshbool

LimitMaxHpLoss

FieldTypeValues / notes
MaxHpPctfloat

LimitUsability

FieldTypeValues / notes
HiddenIfActorHasSkillList<SkillTemplate>
NotHiddenIfActorHasSkillList<SkillTemplate>
NotUsableIfActorHasSkillList<SkillTemplate>
OnlyUsableIfActorHasSkillList<SkillTemplate>

LimitedPassiveUses

FieldTypeValues / notes
MaxUsesint

ModularVehicleSkill

FieldTypeValues / notes
RequiredWeaponCountWeaponCountSingle, Twinfire

MoraleOverMaxEffect

FieldTypeValues / notes
EffectSkillTemplate

MoveAndSelfDestroy

FieldTypeValues / notes
AdditionalDelayfloat
AfterMoveTriggerAnimatorParameterNameTemplate
StartMoveTriggerAnimatorParameterNameTemplate

MovedNextToEnemy

FieldTypeValues / notes
EffectSkillTemplate

NothingPersonal

FieldTypeValues / notes
EffectSkillTemplate
Rangeint

OnElementKilled

FieldTypeValues / notes
Amountint
ApplyEffectEffectReduceSuppression
DisplayTextbool

OverrideVolumeProfile

FieldTypeValues / notes
DesertProfileVolumeProfile
FallbackProfileVolumeProfile
SnowProfileVolumeProfile
TemperateProfileVolumeProfile

Overtime

FieldTypeValues / notes
HpThresholdfloat

PlayAnimationSequence

FieldTypeValues / notes
AnimationAnimationSequenceTemplate

PlaySound

FieldTypeValues / notes
EventPlaySoundEventTypeOnAdded, OnEffectApplied, OnRoundStart, OnTurnEnd, OnTurnStart
SoundToPlayID
Volumefloat

PlaySoundOnEnabled

FieldTypeValues / notes
SoundToPlayID
Volumefloat

PurgeSkill

FieldTypeValues / notes
SkillSkillTemplate

Rally

No settable fields. It carries behaviour only.

RecallTarget

FieldTypeValues / notes
UseLastTargetOfSkillSkillTemplate

ReduceArmor

FieldTypeValues / notes
MaxReductionfloat
ReductionPerStackfloat

RefillAmmo

FieldTypeValues / notes
RestoreMinimumint
RestorePctfloat
SkillFilterISkillFilterC# only (Odin-routed): set in your handler in C#, see Conditions.

RefillSquaddies

FieldTypeValues / notes
AnimationAnimationSequenceTemplate

Regeneration

FieldTypeValues / notes
EffectGameObject
EventApplyOnEventOnApply, OnTurnEnd, OnTurnStart
HitpointsHealedPctMaxfloat
SoundID

RemoveDefect

FieldTypeValues / notes
RequiredTypeSkillTypeActive, Alert, Background, DamageEffect, Item, LightConditionEffect, MoraleEffect, None, Oci, Offmap, OperationEffect, Perk, PlanetaryEffect, Racial, Special, StatusEffect, Terrain, Trait, WeatherEffect, WorldEvent

RemoveSkill

FieldTypeValues / notes
EventRemoveTriggerOnAdded, OnApply, OnRemoved, OnUse
SkillsToRemoveSkillTemplate[]

ReportAmmoToAnimator

FieldTypeValues / notes
ParameterAnimatorParameterNameTemplate

Rescue

No settable fields. It carries behaviour only.

RestoreArmorDurability

FieldTypeValues / notes
RestorePercentint

ReturnOfServe

FieldTypeValues / notes
ConsumedOnTriggerbool

Scanner

FieldTypeValues / notes
AIEffectToEnemiesSkillTemplate
BlipGameObject
DetectsInfantrybool
DetectsVehiclesbool
Rangeint
ScanSpeedfloat
ScanlineGameObject

SetAnimatorBool

FieldTypeValues / notes
ParameterAnimatorParameterNameTemplate

SetAnimatorTrigger

FieldTypeValues / notes
Delayfloat
ParameterAnimatorParameterNameTemplate

SetEntityFlag

FieldTypeValues / notes
FlagEntityFlagsCantEnterContainers, DesignatedTarget, HeavyWeaponsAllowed, IgnoreArmorMovementCosts, IgnoreDeploymentRequirements, IgnoreSuppressedAPLoss, ImmuneDesignatedTarget, ImmuneToDamage, ImmuneToIndirectSuppression, ImmuneToLightEffect, ImmuneToMorale, ImmuneToSuppression, ImmuneToSuppressionFromElementLost, IrrelevantToMorale, None, Rooted, RootedByStance, Stunned

SetUsesPerElement

FieldTypeValues / notes
UsesPerElementint

ShowHUDIcon

FieldTypeValues / notes
IconToShowIconNone, TargetDesignated

ShowIsolatedIcon

FieldTypeValues / notes
Radiusint

ShowUnitHUDIcon

FieldTypeValues / notes
ConditionsITacticalCondition[]
IconSprite
TargetTargetUnitAllEnemies, Self

SpawnEntity

FieldTypeValues / notes
AlignSpawnDirectionbool
EntityToSpawnEntityTemplate
FactionTypeFactionTypeAlliedLocalForces, Civilian, Constructs, EnemyLocalForces, Neutral, Pirates, Player, PlayerAI, RogueArmy, Wildlife
HideIfSpawnLimitReachedbool
OverrideFactionbool
SetParameterOnSpawnAnimatorParameterNameTemplate
SkipFirstTurnForSpawnedEntitybool
SpawnAsMinionMinionTypeAttackDrone, None, ReconDrone, SuicideDrone
SpawnLimitint
TriggerSpawnTriggerOnTileHit, OnUse

SpawnGore

FieldTypeValues / notes
Amountint
Distancefloat
MinMaxScaleVector2
PrefabsPrefabListTemplate

SpawnHalfCover

FieldTypeValues / notes
CoverConfigCoverConfig

SpawnPrefab

FieldTypeValues / notes
PrefabGameObject

SpawnTileEffect

FieldTypeValues / notes
CanHitStructuresbool
ChanceAtCenterint
ChancePerTileFromCenterint
DelayWithDistancefloat
EffectToSpawnTileEffectTemplate
EventApplyOnEventOnDeath, OnTileChanged, OnUse

SpawnTileEffectOnAttacked

FieldTypeValues / notes
EffectToSpawnTileEffectTemplate
Radiusint

StanceDeployed

FieldTypeValues / notes
PropertiesPropertyChange[]

StopBleedout

No settable fields. It carries behaviour only.

SuicideDrone

No settable fields. It carries behaviour only.

Suppression

FieldTypeValues / notes
PinnedDownEffectSkillTemplate
SoundWhenPinnedDownID
SoundWhenSuppressedID

SuppressionConstruct

FieldTypeValues / notes
PinnedDownEffectSkillTemplate
PinnedDownTextstring
SoundWhenPinnedDownID

SwitchBetweenSkills

FieldTypeValues / notes
DisplayAOEAreaOfAlternateSkillbool
IsVisibleAtStartbool
ModeDeactivateModeDisable, Hide
SwitchToAlternativeItemIconbool
SwitchWithSkillSkillTemplate

SynchronizeItemUses

No settable fields. It carries behaviour only.

ThrivingUnderPressure

FieldTypeValues / notes
RequiredStacksForUseint

ToggleSkills

FieldTypeValues / notes
ActiveSkillsSkillTemplate[]

TriggerSkillOnHpLost

FieldTypeValues / notes
CanOnlyTriggerOncePerRoundbool
HpThresholdint
SkillToTriggerSkillTemplate

UseSkill

FieldTypeValues / notes
EventApplyOnEventOnAdded
SkillToUseSkillTemplate

VaultModeOverride

FieldTypeValues / notes
VaultModeVaultModeDestroy, None, OnlyTrigger, RootMotion

VehicleMovement

FieldTypeValues / notes
Concealmentint

VehicleRotation

No settable fields. It carries behaviour only.

VentHeat

FieldTypeValues / notes
VentForSkillSkillTemplate

VerifyByCondition

FieldTypeValues / notes
ConditionITacticalConditionC# 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:

  • ActorTypeCondition
  • CoverCondition
  • DisabledOrStunnedCondition
  • DistanceCondition
  • ElementCountCondition
  • ElementsHitCondition
  • EntityTypeCondition
  • EntityWithOneOfTheTagsCondition
  • EntityWithTagsCondition
  • FactionCondition
  • HasAnySkillCondition
  • HasBeenAttackedThisRoundCondition
  • HasDefectCondition
  • HasFlagCondition
  • HasItemInSlotCondition
  • HasItemWithSlotCondition
  • HasItemWithTagsCondition
  • HasSpecificVehicleCondition
  • HitpointsPercentageCondition
  • ImmuneToMoraleCondition
  • IsContainingEntityCondition
  • IsDeployedCondition
  • IsHiddenCondition
  • IsObjectiveTargetCondition
  • IsUsingSkillInSlotCondition
  • IsVehicleCondition
  • IsolatedCondition
  • LastAttackedByCondition
  • LightCondition
  • MoralePercentCondition
  • MoraleStateCondition
  • SkillWithOneOfTheTagsCondition
  • SkillWithTagsCondition
  • SpecificSkillCondition
  • StationaryCondition
  • StructureTypeCondition
  • SuppressionCondition

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:

  • AdjacentInfantryProvider
  • AttackedThisRoundValueProvider
  • DistanceValueProvider
  • EnemiesKilledProvider
  • MissingHealthProvider
  • ProximityValueProvider
  • RoundValueProvider
  • SquadSizeProvider
  • TilesMovedProvider
  • WrecksDestroyedProvider