kregano

WOTC_Suppression

Sep 1st, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.24 KB | None | 0 0
  1. static function X2AbilityTemplate Suppression()
  2. {
  3. local X2AbilityTemplate Template;
  4. local X2AbilityCost_Ammo AmmoCost;
  5. local X2AbilityCost_ActionPoints ActionPointCost;
  6. local X2Effect_ReserveActionPoints ReserveActionPointsEffect;
  7. local X2Effect_Suppression SuppressionEffect;
  8.  
  9. `CREATE_X2ABILITY_TEMPLATE(Template, 'Suppression');
  10.  
  11. Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_supression";
  12.  
  13. AmmoCost = new class'X2AbilityCost_Ammo';
  14. AmmoCost.iAmmo = 2;
  15. Template.AbilityCosts.AddItem(AmmoCost);
  16.  
  17. ActionPointCost = new class'X2AbilityCost_ActionPoints';
  18. ActionPointCost.bConsumeAllPoints = true; // this will guarantee the unit has at least 1 action point
  19. ActionPointCost.bFreeCost = true; // ReserveActionPoints effect will take all action points away
  20. Template.AbilityCosts.AddItem(ActionPointCost);
  21.  
  22. Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty);
  23.  
  24. Template.AddShooterEffectExclusions();
  25.  
  26. ReserveActionPointsEffect = new class'X2Effect_ReserveActionPoints';
  27. ReserveActionPointsEffect.ReserveType = 'Suppression';
  28. Template.AddShooterEffect(ReserveActionPointsEffect);
  29.  
  30. Template.AbilityToHitCalc = default.DeadEye;
  31. Template.AbilityTargetConditions.AddItem(default.LivingHostileUnitDisallowMindControlProperty);
  32. Template.AbilityTargetConditions.AddItem(default.GameplayVisibilityCondition);
  33. Template.AbilityTargetStyle = default.SimpleSingleTarget;
  34. Template.AbilityTriggers.AddItem(default.PlayerInputTrigger);
  35.  
  36. SuppressionEffect = new class'X2Effect_Suppression';
  37. SuppressionEffect.BuildPersistentEffect(1, false, true, false, eGameRule_PlayerTurnBegin);
  38. SuppressionEffect.bRemoveWhenTargetDies = true;
  39. SuppressionEffect.bRemoveWhenSourceDamaged = true;
  40. SuppressionEffect.bBringRemoveVisualizationForward = true;
  41. SuppressionEffect.SetDisplayInfo(ePerkBuff_Penalty, Template.LocFriendlyName, default.SuppressionTargetEffectDesc, Template.IconImage);
  42. SuppressionEffect.SetSourceDisplayInfo(ePerkBuff_Bonus, Template.LocFriendlyName, default.SuppressionSourceEffectDesc, Template.IconImage);
  43. Template.AddTargetEffect(SuppressionEffect);
  44. Template.AddTargetEffect(HoloTargetEffect());
  45.  
  46. Template.AbilitySourceName = 'eAbilitySource_Perk';
  47. Template.eAbilityIconBehaviorHUD = eAbilityIconBehavior_AlwaysShow;
  48. Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_LIEUTENANT_PRIORITY;
  49. Template.bDisplayInUITooltip = false;
  50. Template.AdditionalAbilities.AddItem('SuppressionShot');
  51. Template.bIsASuppressionEffect = true;
  52. Template.AbilityConfirmSound = "TacticalUI_ActivateAbility";
  53.  
  54. Template.AssociatedPassives.AddItem('HoloTargeting');
  55.  
  56. Template.BuildNewGameStateFn = TypicalAbility_BuildGameState;
  57. Template.BuildVisualizationFn = SuppressionBuildVisualization;
  58. Template.BuildAppliedVisualizationSyncFn = SuppressionBuildVisualizationSync;
  59. Template.CinescriptCameraType = "StandardSuppression";
  60.  
  61. Template.Hostility = eHostility_Offensive;
  62.  
  63. return Template;
  64. }
  65.  
  66. simulated function SuppressionBuildVisualization(XComGameState VisualizeGameState, out array<VisualizationTrack> OutVisualizationTracks)
  67. {
  68. local XComGameStateHistory History;
  69. local XComGameStateContext_Ability Context;
  70. local StateObjectReference InteractingUnitRef;
  71.  
  72. local VisualizationTrack EmptyTrack;
  73. local VisualizationTrack BuildTrack;
  74.  
  75. local XComGameState_Ability Ability;
  76. local X2Action_PlaySoundAndFlyOver SoundAndFlyOver;
  77.  
  78. History = `XCOMHISTORY;
  79.  
  80. Context = XComGameStateContext_Ability(VisualizeGameState.GetContext());
  81. InteractingUnitRef = Context.InputContext.SourceObject;
  82.  
  83. //Configure the visualization track for the shooter
  84. //****************************************************************************************
  85. BuildTrack = EmptyTrack;
  86. BuildTrack.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
  87. BuildTrack.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID);
  88. BuildTrack.TrackActor = History.GetVisualizer(InteractingUnitRef.ObjectID);
  89.  
  90. class'X2Action_ExitCover'.static.AddToVisualizationTrack(BuildTrack, Context);
  91. class'X2Action_StartSuppression'.static.AddToVisualizationTrack(BuildTrack, Context);
  92. OutVisualizationTracks.AddItem(BuildTrack);
  93. //****************************************************************************************
  94. //Configure the visualization track for the target
  95. InteractingUnitRef = Context.InputContext.PrimaryTarget;
  96. Ability = XComGameState_Ability(History.GetGameStateForObjectID(Context.InputContext.AbilityRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1));
  97. BuildTrack = EmptyTrack;
  98. BuildTrack.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
  99. BuildTrack.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID);
  100. BuildTrack.TrackActor = History.GetVisualizer(InteractingUnitRef.ObjectID);
  101. SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTrack(BuildTrack, Context));
  102. SoundAndFlyOver.SetSoundAndFlyOverParameters(None, Ability.GetMyTemplate().LocFlyOverText, '', eColor_Bad);
  103. if (XComGameState_Unit(BuildTrack.StateObject_OldState).ReserveActionPoints.Length != 0 && XComGameState_Unit(BuildTrack.StateObject_NewState).ReserveActionPoints.Length == 0)
  104. {
  105. SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyOver'.static.AddToVisualizationTrack(BuildTrack, Context));
  106. SoundAndFlyOver.SetSoundAndFlyOverParameters(none, class'XLocalizedData'.default.OverwatchRemovedMsg, '', eColor_Bad);
  107. }
  108. OutVisualizationTracks.AddItem(BuildTrack);
  109. }
  110.  
  111. simulated function SuppressionBuildVisualizationSync(name EffectName, XComGameState VisualizeGameState, out VisualizationTrack BuildTrack)
  112. {
  113. local X2Action_ExitCover ExitCover;
  114.  
  115. if (EffectName == class'X2Effect_Suppression'.default.EffectName)
  116. {
  117. ExitCover = X2Action_ExitCover(class'X2Action_ExitCover'.static.AddToVisualizationTrack( BuildTrack, VisualizeGameState.GetContext() ));
  118. ExitCover.bIsForSuppression = true;
  119.  
  120. class'X2Action_StartSuppression'.static.AddToVisualizationTrack( BuildTrack, VisualizeGameState.GetContext() );
  121. }
  122. }
  123.  
  124. static function X2AbilityTemplate SuppressionShot()
  125. {
  126. local X2AbilityTemplate Template;
  127. local X2AbilityCost_ReserveActionPoints ReserveActionPointCost;
  128. local X2AbilityToHitCalc_StandardAim StandardAim;
  129. local X2Condition_Visibility TargetVisibilityCondition;
  130. local X2AbilityTrigger_Event Trigger;
  131. local array<name> SkipExclusions;
  132. local X2Condition_UnitEffectsWithAbilitySource TargetEffectCondition;
  133. local X2Effect_RemoveEffects RemoveSuppression;
  134. local X2Effect ShotEffect;
  135.  
  136. `CREATE_X2ABILITY_TEMPLATE(Template, 'SuppressionShot');
  137.  
  138. Template.bDontDisplayInAbilitySummary = true;
  139. ReserveActionPointCost = new class'X2AbilityCost_ReserveActionPoints';
  140. ReserveActionPointCost.iNumPoints = 1;
  141. ReserveActionPointCost.AllowedTypes.AddItem('Suppression');
  142. Template.AbilityCosts.AddItem(ReserveActionPointCost);
  143.  
  144. StandardAim = new class'X2AbilityToHitCalc_StandardAim';
  145. StandardAim.bReactionFire = true;
  146. Template.AbilityToHitCalc = StandardAim;
  147. Template.AbilityToHitOwnerOnMissCalc = StandardAim;
  148.  
  149. Template.AbilityTargetConditions.AddItem(default.LivingHostileTargetProperty);
  150.  
  151. TargetEffectCondition = new class'X2Condition_UnitEffectsWithAbilitySource';
  152. TargetEffectCondition.AddRequireEffect(class'X2Effect_Suppression'.default.EffectName, 'AA_UnitIsNotSuppressed');
  153. Template.AbilityTargetConditions.AddItem(TargetEffectCondition);
  154.  
  155. TargetVisibilityCondition = new class'X2Condition_Visibility';
  156. TargetVisibilityCondition.bRequireGameplayVisible = true;
  157. Template.AbilityTargetConditions.AddItem(TargetVisibilityCondition);
  158.  
  159. Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty);
  160.  
  161. SkipExclusions.AddItem(class'X2AbilityTemplateManager'.default.DisorientedName);
  162. Template.AddShooterEffectExclusions(SkipExclusions);
  163. Template.bAllowAmmoEffects = true;
  164.  
  165. RemoveSuppression = new class'X2Effect_RemoveEffects';
  166. RemoveSuppression.EffectNamesToRemove.AddItem(class'X2Effect_Suppression'.default.EffectName);
  167. RemoveSuppression.bCheckSource = true;
  168. RemoveSuppression.SetupEffectOnShotContextResult(true, true);
  169. Template.AddShooterEffect(RemoveSuppression);
  170.  
  171. Template.AbilityTargetStyle = default.SimpleSingleTarget;
  172.  
  173. //Trigger on movement - interrupt the move
  174. Trigger = new class'X2AbilityTrigger_Event';
  175. Trigger.EventObserverClass = class'X2TacticalGameRuleset_MovementObserver';
  176. Trigger.MethodName = 'InterruptGameState';
  177. Template.AbilityTriggers.AddItem(Trigger);
  178.  
  179. Template.AbilitySourceName = 'eAbilitySource_Standard';
  180. Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_NeverShow;
  181. Template.IconImage = "img:///UILibrary_PerkIcons.UIPerk_supression";
  182. Template.ShotHUDPriority = class'UIUtilities_Tactical'.const.CLASS_LIEUTENANT_PRIORITY;
  183. Template.bDisplayInUITooltip = false;
  184. Template.bDisplayInUITacticalText = false;
  185.  
  186. //don't want to exit cover, we are already in suppression/alert mode.
  187. Template.bSkipExitCoverWhenFiring = true;
  188.  
  189. Template.BuildNewGameStateFn = TypicalAbility_BuildGameState;
  190. Template.BuildVisualizationFn = TypicalAbility_BuildVisualization;
  191. Template.bAllowFreeFireWeaponUpgrade = true;
  192.  
  193. // Put holo target effect first because if the target dies from this shot, it will be too late to notify the effect.
  194. ShotEffect = class'X2Ability_GrenadierAbilitySet'.static.HoloTargetEffect();
  195. ShotEffect.TargetConditions.AddItem(class'X2Ability_DefaultAbilitySet'.static.OverwatchTargetEffectsCondition());
  196. Template.AddTargetEffect(ShotEffect);
  197. // Various Soldier ability specific effects - effects check for the ability before applying
  198. ShotEffect = class'X2Ability_GrenadierAbilitySet'.static.ShredderDamageEffect();
  199. ShotEffect.TargetConditions.AddItem(class'X2Ability_DefaultAbilitySet'.static.OverwatchTargetEffectsCondition());
  200. Template.AddTargetEffect(ShotEffect);
  201.  
  202. return Template;
  203. }
Add Comment
Please, Sign In to add comment