Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```
- static function X2AbilityTemplate IcarusJump()
- {
- local X2AbilityTemplate Template;
- local X2AbilityTarget_Cursor CursorTarget;
- local X2AbilityMultiTarget_Radius RadiusMultiTarget;
- local X2AbilityCost_Charges ChargeCost;
- local X2AbilityCharges Charges;
- local X2AbilityCooldown Cooldown;
- local X2Effect_RemoveEffects RemoveEffects;
- local X2Effect_Persistent IcarusJumpEffect;
- local X2Condition_UnitEffects UnitEffectsCondition;
- Template= new(None, string('IcarusJump')) class'X2AbilityTemplate'; Template.SetTemplateName('IcarusJump');;;
- Template.AbilitySourceName = 'eAbilitySource_Standard';
- Template.eAbilityIconBehaviorHUD = EAbilityIconBehavior_AlwaysShow;
- Template.IconImage = "img:///UILibrary_DLC2Images.UIPerk_icarusjump";
- Template.AbilityCosts.AddItem(default.FreeActionCost);
- ChargeCost = new class'X2AbilityCost_Charges';
- ChargeCost.NumCharges = 1;
- Template.AbilityCosts.AddItem(ChargeCost);
- Charges = new class'X2AbilityCharges';
- Charges.InitialCharges = default.ICARUS_JUMP_CHARGES;
- Template.AbilityCharges = Charges;
- Cooldown = new class'X2AbilityCooldown';
- Cooldown.iNumTurns = 2;
- Template.AbilityCooldown = Cooldown;
- Template.TargetingMethod = class'X2TargetingMethod_DLC_2IcarusJump';
- Template.AbilityTriggers.AddItem(default.PlayerInputTrigger);
- Template.AbilityToHitCalc = default.DeadEye;
- CursorTarget = new class'X2AbilityTarget_Cursor';
- CursorTarget.bRestrictToSquadsightRange = true;
- Template.AbilityTargetStyle = CursorTarget;
- RadiusMultiTarget = new class'X2AbilityMultiTarget_Radius';
- RadiusMultiTarget.fTargetRadius = 0.25; // small amount so it just grabs one tile
- Template.AbilityMultiTargetStyle = RadiusMultiTarget;
- // Shooter Conditions
- Template.AbilityShooterConditions.AddItem(default.LivingShooterProperty);
- UnitEffectsCondition = new class'X2Condition_UnitEffects';
- UnitEffectsCondition.AddExcludeEffect(class'X2Ability_CarryUnit'.default.CarryUnitEffectName, 'AA_CarryingUnit');
- Template.AbilityShooterConditions.AddItem(UnitEffectsCondition);
- Template.AddShooterEffectExclusions();
- RemoveEffects = new class'X2Effect_RemoveEffects';
- RemoveEffects.EffectNamesToRemove.AddItem('IcarusJumpEffect');
- Template.AddShooterEffect(RemoveEffects);
- IcarusJumpEffect = new class'X2Effect_Persistent';
- IcarusJumpEffect.BuildPersistentEffect(1, false, true);
- IcarusJumpEffect.DuplicateResponse = eDupe_Refresh;
- IcarusJumpEffect.EffectName = 'IcarusJumpEffect';
- IcarusJumpEffect.EffectAddedFn = IcarusJump_EffectAdded;
- Template.AddShooterEffect(IcarusJumpEffect);
- Template.PostActivationEvents.AddItem('RulerArmorAbilityActivated');
- Template.ModifyNewContextFn = class'X2Ability_Cyberus'.static.Teleport_ModifyActivatedAbilityContext;
- Template.BuildNewGameStateFn = class'X2Ability_DLC_Day60ItemGrantedAbilitySet'.static.IcarusJump_BuildGameState;
- Template.BuildVisualizationFn = IcarusJump_BuildVisualization;
- return Template;
- }
- static simulated function XComGameState IcarusJump_BuildGameState(XComGameStateContext Context)
- {
- local XComGameState NewGameState;
- local XComGameState_Unit UnitState;
- local XComGameStateContext_Ability AbilityContext;
- local X2EventManager EventManager;
- NewGameState = class'X2Ability_Cyberus'.static.Teleport_BuildGameState(Context);
- AbilityContext = XComGameStateContext_Ability(NewGameState.GetContext());
- UnitState = XComGameState_Unit(NewGameState.CreateStateObject(class'XComGameState_Unit', AbilityContext.InputContext.SourceObject.ObjectID));
- EventManager = class'X2EventManager'.static.GetEventManager();
- EventManager.TriggerEvent('UnitIcarusJumped', UnitState, UnitState, NewGameState);
- return NewGameState;
- }
- static function IcarusJump_EffectAdded(X2Effect_Persistent PersistentEffect, const out EffectAppliedData ApplyEffectParameters, XComGameState_BaseObject kNewTargetState, XComGameState NewGameState)
- {
- local XComWorldData World;
- local X2EventManager EventManager;
- local XComGameState_Unit UnitState;
- local TTile StartTileLocation, EndTileLocation, Tile;
- local XComGameState_EnvironmentDamage WorldDamage;
- World = class'XComWorldData'.static.GetWorldData();
- EventManager = class'X2EventManager'.static.GetEventManager();
- UnitState = XComGameState_Unit(kNewTargetState);
- Assert(UnitState != none);
- StartTileLocation = UnitState.TileLocation;
- EndTileLocation = UnitState.TileLocation;
- EndTileLocation.Z = World.NumZ;
- Tile = StartTileLocation;
- while( Tile != EndTileLocation )
- {
- ++Tile.Z;
- WorldDamage = XComGameState_EnvironmentDamage(NewGameState.CreateStateObject(class'XComGameState_EnvironmentDamage'));
- WorldDamage.DamageTypeTemplateName = 'NoFireExplosion';
- WorldDamage.DamageCause = UnitState.GetReference();
- WorldDamage.DamageSource = WorldDamage.DamageCause;
- WorldDamage.bRadialDamage = false;
- WorldDamage.HitLocationTile = Tile;
- WorldDamage.DamageTiles.AddItem(WorldDamage.HitLocationTile);
- WorldDamage.DamageDirection.X = 0.0f;
- WorldDamage.DamageDirection.Y = 0.0f;
- WorldDamage.DamageDirection.Z = -1.0f;
- WorldDamage.DamageAmount = 30;
- WorldDamage.PhysImpulse = 10;
- NewGameState.AddStateObject(WorldDamage);
- }
- EventManager.TriggerEvent('ObjectMoved', UnitState, UnitState, NewGameState);
- EventManager.TriggerEvent('UnitMoveFinished', UnitState, UnitState, NewGameState);
- }
- simulated function IcarusJump_BuildVisualization(XComGameState VisualizeGameState, out array<VisualizationTrack> OutVisualizationTracks)
- {
- local XComGameStateHistory History;
- local XComGameStateContext_Ability AbilityContext;
- local StateObjectReference InteractingUnitRef;
- local X2AbilityTemplate AbilityTemplate;
- local VisualizationTrack EmptyTrack, BuildTrack;
- local X2Action_PlaySoundAndFlyOver SoundAndFlyover;
- local int i, j;
- local XComGameState_WorldEffectTileData WorldDataUpdate;
- local X2Action_MoveTurn MoveTurnAction;
- local X2VisualizerInterface TargetVisualizerInterface;
- local XComGameState_EnvironmentDamage DamageEventStateObject;
- History = class'XComGameStateHistory'.static.GetGameStateHistory();
- AbilityContext = XComGameStateContext_Ability(VisualizeGameState.GetContext());
- InteractingUnitRef = AbilityContext.InputContext.SourceObject;
- AbilityTemplate = class'XComGameState_Ability'.static.GetMyTemplateManager().FindAbilityTemplate(AbilityContext.InputContext.AbilityTemplateName);
- //****************************************************************************************
- //Configure the visualization track for the source
- //****************************************************************************************
- BuildTrack = EmptyTrack;
- BuildTrack.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
- BuildTrack.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID);
- BuildTrack.TrackActor = History.GetVisualizer(InteractingUnitRef.ObjectID);
- SoundAndFlyOver = X2Action_PlaySoundAndFlyOver(class'X2Action_PlaySoundAndFlyover'.static.AddToVisualizationTrack(BuildTrack, AbilityContext));
- SoundAndFlyOver.SetSoundAndFlyOverParameters(None, AbilityTemplate.LocFlyOverText, '', eColor_Good);
- // Turn to face the target action. The target location is the center of the ability's radius, stored in the 0 index of the TargetLocations
- MoveTurnAction = X2Action_MoveTurn(class'X2Action_MoveTurn'.static.AddToVisualizationTrack(BuildTrack, AbilityContext));
- MoveTurnAction.m_vFacePoint = AbilityContext.InputContext.TargetLocations[0];
- // move action
- class'X2VisualizerHelpers'.static.ParsePath(AbilityContext, BuildTrack, OutVisualizationTracks);
- for (i = 0; i < BuildTrack.TrackActions.Length; ++i)
- {
- if (X2Action_CameraFollowUnit(BuildTrack.TrackActions[i]) != none)
- X2Action_CameraFollowUnit(BuildTrack.TrackActions[i]).bLockFloorZ = true;
- }
- OutVisualizationTracks.AddItem(BuildTrack);
- //****************************************************************************************
- foreach VisualizeGameState.IterateByClassType(class'XComGameState_WorldEffectTileData', WorldDataUpdate)
- {
- BuildTrack = EmptyTrack;
- BuildTrack.TrackActor = none;
- BuildTrack.StateObject_NewState = WorldDataUpdate;
- BuildTrack.StateObject_OldState = WorldDataUpdate;
- for (i = 0; i < AbilityTemplate.AbilityTargetEffects.Length; ++i)
- {
- AbilityTemplate.AbilityTargetEffects[i].AddX2ActionsForVisualization(VisualizeGameState, BuildTrack, AbilityContext.FindTargetEffectApplyResult(AbilityTemplate.AbilityTargetEffects[i]));
- }
- OutVisualizationTracks.AddItem(BuildTrack);
- }
- //****************************************************************************************
- //Configure the visualization track for the targets
- //****************************************************************************************
- for( i = 0; i < AbilityContext.InputContext.MultiTargets.Length; ++i )
- {
- InteractingUnitRef = AbilityContext.InputContext.MultiTargets[i];
- BuildTrack = EmptyTrack;
- BuildTrack.StateObject_OldState = History.GetGameStateForObjectID(InteractingUnitRef.ObjectID, eReturnType_Reference, VisualizeGameState.HistoryIndex - 1);
- BuildTrack.StateObject_NewState = VisualizeGameState.GetGameStateForObjectID(InteractingUnitRef.ObjectID);
- BuildTrack.TrackActor = History.GetVisualizer(InteractingUnitRef.ObjectID);
- class'X2Action_WaitForAbilityEffect'.static.AddToVisualizationTrack(BuildTrack, AbilityContext);
- for( j = 0; j < AbilityContext.ResultContext.MultiTargetEffectResults[i].Effects.Length; ++j )
- {
- AbilityContext.ResultContext.MultiTargetEffectResults[i].Effects[j].AddX2ActionsForVisualization(VisualizeGameState, BuildTrack, AbilityContext.ResultContext.MultiTargetEffectResults[i].ApplyResults[j]);
- }
- TargetVisualizerInterface = X2VisualizerInterface(BuildTrack.TrackActor);
- if( TargetVisualizerInterface != none )
- {
- //Allow the visualizer to do any custom processing based on the new game state. For example, units will create a death action when they reach 0 HP.
- TargetVisualizerInterface.BuildAbilityEffectsVisualization(VisualizeGameState, BuildTrack);
- }
- if (BuildTrack.TrackActions.Length > 0)
- {
- OutVisualizationTracks.AddItem(BuildTrack);
- }
- }
- // add visualization of environment damage
- foreach VisualizeGameState.IterateByClassType(class'XComGameState_EnvironmentDamage', DamageEventStateObject)
- {
- BuildTrack = EmptyTrack;
- BuildTrack.StateObject_OldState = DamageEventStateObject;
- BuildTrack.StateObject_NewState = DamageEventStateObject;
- BuildTrack.TrackActor = class'XComGameStateHistory'.static.GetGameStateHistory().GetVisualizer(DamageEventStateObject.ObjectID);
- class'X2Action_WaitForAbilityEffect'.static.AddToVisualizationTrack(BuildTrack, AbilityContext);
- class'X2Action_ApplyWeaponDamageToTerrain'.static.AddToVisualizationTrack(BuildTrack, AbilityContext);
- OutVisualizationTracks.AddItem(BuildTrack);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement