Skip to content

Instantly share code, notes, and snippets.

@InfiniteCanvas
Created May 26, 2018 17:39
Show Gist options
  • Save InfiniteCanvas/a0b95d75c1310e651a2837921d6b9da8 to your computer and use it in GitHub Desktop.
Save InfiniteCanvas/a0b95d75c1310e651a2837921d6b9da8 to your computer and use it in GitHub Desktop.
class AHarderWar_Abilities_ChosenAssassin extends X2Ability_ChosenAssassin config(GameData_SoldierSkills);
static function array<X2DataTemplate> CreateTemplates()
{
local array<X2DataTemplate> Templates;
Templates.AddItem(LastBreath());
return Templates;
}
static function X2DataTemplate LastBreath()
{
local X2AbilityTemplate Template;
local X2AbilityCost_ActionPoints ActionPointCost;
local X2AbilityToHitCalc_StandardMelee StandardMelee;
local array<name> SkipExclusions;
local X2Effect_RemoveEffects RemoveEffects;
local X2Effect_ApplyWeaponDamage WeaponDamageEffect;
local X2Effect_KillUnit LastBreathEffect;
local X2Condition_UnitEffects UnitEffectsCondition;
local X2AbilityCooldown_LocalAndGlobal Cooldown;
local X2Condition_UnitProperty UnitPropertyCondition;
`CREATE_X2ABILITY_TEMPLATE(Template, 'LastBreath');
Template.IconImage = "img:///UILibrary_XPACK_Common.PerkIcons.UIPerk_partingsilk";
Template.Hostility = eHostility_Offensive;
Template.AbilitySourceName = 'eAbilitySource_Standard';
Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow;
Template.bFrameEvenWhenUnitIsHidden = true;
ActionPointCost = new class'X2AbilityCost_ActionPoints';
ActionPointCost.iNumPoints = 1;
Template.AbilityCosts.AddItem(ActionPointCost);
StandardMelee = new class'X2AbilityToHitCalc_StandardMelee';
StandardMelee.bGuaranteedHit = true;
Template.AbilityToHitCalc = StandardMelee;
Template.AbilityTargetStyle = new class'X2AbilityTarget_MovingMelee';
Template.TargetingMethod = class'X2TargetingMethod_MeleePath';
Template.AbilityTriggers.AddItem(default.PlayerInputTrigger);
Template.AbilityTriggers.AddItem(new class'X2AbilityTrigger_EndOfMove');
Cooldown = new class'X2AbilityCooldown_LocalAndGlobal';
Cooldown.iNumTurns = 1;
Cooldown.NumGlobalTurns = 0;
Template.AbilityCooldown = Cooldown;
// Shooter Conditions
Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty);
SkipExclusions.AddItem(class'X2StatusEffects'.default.BurningName);
SkipExclusions.AddItem(class'X2AbilityTemplateManager'.default.DisorientedName);
Template.AddShooterEffectExclusions(SkipExclusions);
RemoveEffects = new class'X2Effect_RemoveEffects';
RemoveEffects.EffectNamesToRemove.AddItem(class'X2Effect_VanishingWind'.default.EffectName);
RemoveEffects.bApplyOnMiss = true;
Template.AddShooterEffect(RemoveEffects);
// Target Conditions
Template.AbilityTargetConditions.AddItem(default.LivingHostileTargetProperty);
Template.AbilityTargetConditions.AddItem(default.MeleeVisibilityCondition);
// Exclude Turrets. Also only consider targets that are eligible for Extract/Kidnap.
UnitPropertyCondition = new class'X2Condition_UnitProperty';
UnitPropertyCondition.ExcludeTurret = true;
UnitPropertyCondition.ExcludeRobotic = true;
UnitPropertyCondition.ExcludeAlien = true;
UnitPropertyCondition.ExcludeFriendlyToSource = true;
UnitPropertyCondition.FailOnNonUnits = true;
UnitPropertyCondition.RequireUnitSelectedFromHQ = true;
Template.AbilityTargetConditions.AddItem(UnitPropertyCondition);
WeaponDamageEffect = new class'X2Effect_ApplyWeaponDamage';
WeaponDamageEffect.bIgnoreBaseDamage = true;
WeaponDamageEffect.DamageTag = 'PartingSilk';
Template.AddTargetEffect(WeaponDamageEffect);
LastBreathEffect = new class'X2Effect_KillUnit';
LastBreathEffect.BuildPersistentEffect(1, false, false, false, eGameRule_PlayerTurnEnd);
LastBreathEffect.EffectName = 'LastBreath';
LastBreathEffect.bApplyOnMiss = false;
Template.AddTargetEffect(LastBreathEffect);
UnitEffectsCondition = new class'X2Condition_UnitEffects';
UnitEffectsCondition.AddRequireEffect(class'X2Effect_VanishingWind'.default.EffectName, 'AA_MissingRequiredEffect');
Template.AbilityShooterConditions.AddItem(UnitEffectsCondition);
Template.bSkipMoveStop = true;
Template.BuildNewGameStateFn = PartingSilk_BuildGameState;
Template.BuildVisualizationFn = TypicalAbility_BuildVisualization;
Template.BuildInterruptGameStateFn = TypicalMoveEndAbility_BuildInterruptGameState;
Template.CinescriptCameraType = "ChosenAssassin_PartingSilk";
Template.PostActivationEvents.AddItem('PartingSilkActivated');
Template.LostSpawnIncreasePerUse = class'X2AbilityTemplateManager'.default.MeleeLostSpawnIncreasePerUse;
return Template;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment