Back to home

Paladinswatch: Jenos

ZB10E
click to copy
This game is archived.
If you with to unarchive it, click the "restore" button in the options menu.

Category:
Custom hero / hero rework

Author:
Josbird

Rating:
2

Version:
1.0.0

Posted:
16 days ago

Tags:
soldier:76 paladins paladinswatch jenos

Share this workshop!

Options

Brings Paladins' cosmic support into Overwatch. To the best they can be approximated at least. Warning: will likely tank framerates if used in a full lobby.

The abilities:

  • Primary fire: Star Splitter. Fires 9 rounds per second dealing 9.2 damage each, with a clip size of 28.
  • Secondary fire: Astral Mark (6.5s). Heals an ally for 30 hp and then 22 hps over 10s. Can be applied through walls.
  • Ability 1: Stellar Wind (2s). Increase movement speed by 65% and increase jump height while decreasing gravity. Using any other ability cancels this.
  • Ability 2: Void Grip (12s). Lifts an enemy for 2.5s, dealing 36 damage over the duration. The initial grab applies a short root status.
  • Ultimate Ability: Through Time and Space. Fires a massive laser after 1.2s that deals 250 damage. Pierces terrain and shields, and has global range.

Video demonstration: https://youtu.be/Q8S6h3CWFMA

disabled rule("DEBUG")
{
	event
	{
		Ongoing - Global;
	}
}

disabled rule("Ult debug")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Ultimate Charge Percent(Event Player) < 100;
		Has Spawned(Event Player) == True;
	}

	actions
	{
		Set Ultimate Charge(Event Player, 100);
	}
}

disabled rule("Stun debug")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Is Button Held(Event Player, Interact) == True;
	}

	actions
	{
		Set Status(Event Player, Null, Stunned, 0.500);
	}
}

disabled rule("Cam debug start")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Is Button Held(Event Player, Interact) == True;
		Player Variable(Event Player, J) == Null;
	}

	actions
	{
		Wait(0.016, Ignore Condition);
		Skip If(Not(Is Button Held(Event Player, Interact)), 1);
		Loop If Condition Is True;
		Set Player Variable(Event Player, J, Add(Eye Position(Event Player), Multiply(Up, 2)));
		Start Camera(Event Player, Player Variable(Event Player, J), Eye Position(Event Player), 15);
	}
}

disabled rule("Cam debug stop")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Is Button Held(Event Player, Interact) == True;
		Player Variable(Event Player, J) != Null;
	}

	actions
	{
		Wait(0.016, Ignore Condition);
		Skip If(Not(Is Button Held(Event Player, Interact)), 1);
		Loop If Condition Is True;
		Stop Camera(Event Player);
		Set Player Variable(Event Player, J, Null);
	}
}

disabled rule("Bot debug")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Is Communicating(Event Player, Hello) == True;
	}

	actions
	{
		Create Dummy Bot(Hero(Roadhog), Opposite Team Of(Team Of(Event Player)), -1.000, World Vector Of(Add(Multiply(Left, 5), Multiply(
			Forward, 10)), Event Player, Rotation And Translation), Multiply(Facing Direction Of(Event Player), -1.000));
		Create Dummy Bot(Hero(Roadhog), Team Of(Event Player), -1.000, World Vector Of(Add(Multiply(Left, -5.000), Multiply(Forward, 4)),
			Event Player, Rotation And Translation), Multiply(Facing Direction Of(Event Player), 1));
		Create Dummy Bot(Hero(Moira), Opposite Team Of(Team Of(Event Player)), -1.000, World Vector Of(Add(Multiply(Left, -5.000),
			Multiply(Forward, 10)), Event Player, Rotation And Translation), Multiply(Facing Direction Of(Event Player), -1.000));
	}
}

disabled rule("Clear bots")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Is Communicating(Event Player, Need Healing) == True;
	}

	actions
	{
		Destroy All Dummy Bots;
	}
}

disabled rule("Mark bots")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Is Dummy Bot(Event Player) == True;
	}

	actions
	{
		Create Icon(All Players(Opposite Team Of(Team Of(Event Player))), Event Player, Bolt, Visible To and Position, White, False);
	}
}

disabled rule("Debug moira bot fire")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Host Player == Event Player;
		Is Button Held(Event Player, Crouch) == True;
	}

	actions
	{
		Skip If(Is Firing Secondary(Players On Hero(Hero(Moira), All Teams)), 1);
		Start Holding Button(Players On Hero(Hero(Moira), All Teams), Secondary Fire);
		Skip If(Not(Is Firing Secondary(Players On Hero(Hero(Moira), All Teams))), 1);
		Stop Holding Button(Players On Hero(Hero(Moira), All Teams), Secondary Fire);
	}
}

disabled rule("Rez debug")
{
	event
	{
		Player Died;
		All;
		All;
	}

	conditions
	{
		Attacker != Event Player;
		Attacker != Null;
	}

	actions
	{
		Wait(3, Ignore Condition);
		Resurrect(Event Player);
	}
}

disabled rule("INIT")
{
	event
	{
		Ongoing - Global;
	}
}

rule("Vars, hud, effects (I = initialized, S = stellar wind CD, M = astral mark CD, G = void grip CD)")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Player Variable(Event Player, I) != True;
	}

	actions
	{
		Set Player Variable(Event Player, I, True);
		Set Player Variable(Event Player, S, 0);
		Create HUD Text(Filtered Array(Event Player, Compare(Player Variable(Event Player, S), >, 0)), Round To Integer(Player Variable(
			Event Player, S), Up), Custom String("Stellar wind", Null, Null, Null), String("Ability 1", Null, Null, Null), Top, 3, Orange,
			Green, White, Visible To and String, Default Visibility);
		Create HUD Text(Filtered Array(Event Player, Compare(Player Variable(Event Player, S), ==, 0)), String("Ready", Null, Null, Null),
			Custom String("Stellar Wind", Null, Null, Null), String("Ability 1", Null, Null, Null), Top, 3, White, Green, White,
			Visible To and String, Default Visibility);
		Create HUD Text(Filtered Array(Event Player, Compare(Player Variable(Event Player, S), ==, -1.000)), String("On", Null, Null,
			Null), Custom String("Stellar Wind", Null, Null, Null), String("Ability 1", Null, Null, Null), Top, 3, Yellow, Green, White,
			Visible To and String, Default Visibility);
		Create Icon(Filtered Array(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, S), ==, -1.000)),
			Is In Line of Sight(Add(Event Player, Add(Up, Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), 45),
			-30.000))), Current Array Element, Barriers Do Not Block LOS)), Add(Event Player, Add(Up, Direction From Angles(Add(
			Horizontal Facing Angle Of(Event Player), 45), -30.000))), Arrow: Right, Visible To and Position, Green, False);
		Create Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, S), ==, -1.000)), Good Aura Sound,
			White, Event Player, 100, Visible To Position and Radius);
		Create Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, S), ==, -1.000)), Sparkles, Sky Blue,
			Event Player, 0.500, Visible To Position and Radius);
		Create Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, S), ==, -1.000)), Bad Aura, Sky Blue,
			Event Player, 0.500, Visible To Position and Radius);
		Set Player Variable(Event Player, M, 0);
		Create HUD Text(Filtered Array(Event Player, Compare(Player Variable(Event Player, M), >, 0)), Round To Integer(Player Variable(
			Event Player, M), Up), Custom String("Astral Mark", Null, Null, Null), String("Secondary Fire", Null, Null, Null), Top, 2,
			Orange, Yellow, White, Visible To and String, Default Visibility);
		Create HUD Text(Filtered Array(Event Player, Compare(Player Variable(Event Player, M), ==, 0)), String("Ready", Null, Null, Null),
			Custom String("Astral Mark", Null, Null, Null), String("Secondary Fire", Null, Null, Null), Top, 2, White, Yellow, White,
			Visible To and String, Default Visibility);
		Create Icon(Filtered Array(Event Player, And(And(And(And(Compare(Hero Of(Event Player), ==, Hero(Soldier: 76)), Is Alive(
			Player Closest To Reticle(Event Player, Team Of(Event Player)))), Compare(Distance Between(Player Closest To Reticle(
			Event Player, Team Of(Event Player)), Event Player), <=, 30)), Compare(Player Variable(Event Player, M), ==, 0)),
			Is In View Angle(Event Player, Player Closest To Reticle(Event Player, Team Of(Event Player)), 15))), Position Of(
			Player Closest To Reticle(Event Player, Team Of(Event Player))), Plus, Visible To and Position, Yellow, True);
		Chase Player Variable At Rate(Event Player, M, 0, 1, Destination and Rate);
		Set Player Variable(Event Player, G, 0);
		Create HUD Text(Filtered Array(Event Player, Compare(Player Variable(Event Player, G), >, 0)), Round To Integer(Player Variable(
			Event Player, G), Up), Custom String("Void Grip", Null, Null, Null), String("Ability 2", Null, Null, Null), Top, 4, Orange,
			Red, White, Visible To and String, Default Visibility);
		Create HUD Text(Filtered Array(Event Player, Compare(Player Variable(Event Player, G), ==, 0)), String("Ready", Null, Null, Null),
			Custom String("Void Grip", Null, Null, Null), String("Ability 2", Null, Null, Null), Top, 4, White, Red, White,
			Visible To and String, Default Visibility);
		Create HUD Text(Filtered Array(Event Player, Compare(Player Variable(Event Player, G), ==, -1.000)), String("On", Null, Null,
			Null), Custom String("Void Grip", Null, Null, Null), String("Ability 2", Null, Null, Null), Top, 4, Yellow, Red, White,
			Visible To and String, Default Visibility);
		Set Player Variable(Event Player, U, -1.000);
		Set Player Variable(Event Player, Z, True);
		Create Icon(Filtered Array(Event Player, And(And(And(And(And(Compare(Hero Of(Event Player), ==, Hero(Soldier: 76)), Is Alive(
			Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player))))), Compare(Player Variable(Event Player, G),
			==, 0)), Compare(Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(
			Event Player)))), <=, 20)), Is In Line of Sight(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(
			Event Player))), Enemy Barriers Block LOS)), Is In View Angle(Event Player, Player Closest To Reticle(Event Player,
			Opposite Team Of(Team Of(Event Player))), 15))), Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(
			Event Player))), Stop, Visible To and Position, Purple, False);
		Create Icon(Filtered Array(All Players(All Teams), And(Is In Line of Sight(Current Array Element, Player Variable(Event Player, E),
			Barriers Do Not Block LOS), Compare(Player Variable(Event Player, E), !=, Null))), Player Variable(Event Player, E), Spiral,
			Visible To and Position, Red, False);
		Create Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, E), !=, Null)), Good Aura, Sky Blue,
			Player Variable(Event Player, E), 1, Visible To Position and Radius);
		Create Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, E), !=, Null)), Bad Aura Sound,
			Sky Blue, Player Variable(Event Player, E), 100, Visible To Position and Radius);
		Create Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, E), !=, Null)), Bad Aura Sound,
			Sky Blue, Event Player, 100, Visible To Position and Radius);
		Create Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, E), !=, Null)), Bad Aura, Blue,
			Player Variable(Event Player, E), 1, Visible To Position and Radius);
		Create Icon(Filtered Array(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, G), ==, -1.000)),
			Is In Line of Sight(Add(Event Player, Add(Multiply(Up, 1.100), Multiply(Direction From Angles(Add(Horizontal Facing Angle Of(
			Event Player), 45), 0), 0.350))), Current Array Element, Barriers Do Not Block LOS)), Add(Event Player, Add(Multiply(Up,
			1.100), Multiply(Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), 45), 0), 0.350))), Spiral,
			Visible To and Position, Red, False);
		Create Icon(Filtered Array(Filtered Array(Filtered Array(All Players(All Teams), Is Alive(Event Player)), And(Compare(
			Player Variable(Event Player, G), !=, -1.000), And(Compare(Player Variable(Event Player, S), !=, -1.000), Compare(
			Player Variable(Event Player, U), ==, -1.000)))), Is In Line of Sight(Add(Event Player, Add(Multiply(Up, 1.100), Multiply(
			Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), 45), 0), 0.350))), Current Array Element,
			Barriers Do Not Block LOS)), Add(Event Player, Add(Multiply(Up, 1.100), Multiply(Direction From Angles(Add(
			Horizontal Facing Angle Of(Event Player), 45), 0), 0.350))), Moon, Visible To and Position, Blue, False);
	}
}

rule("Ult effects (initialized by Z)")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Player Variable(Event Player, Z) == True;
	}

	actions
	{
		Create Effect(Filtered Array(All Players(Team Of(Event Player)), Compare(Player Variable(Event Player, U), !=, -1.000)), Sparkles,
			Blue, Eye Position(Event Player), Multiply(2, Player Variable(Event Player, U)), Visible To Position and Radius);
		Create Effect(Filtered Array(All Players(Team Of(Event Player)), Compare(Player Variable(Event Player, U), !=, -1.000)), Good Aura,
			Blue, Eye Position(Event Player), Player Variable(Event Player, U), Visible To Position and Radius);
		Create Effect(Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Compare(Player Variable(Event Player, U), !=,
			-1.000)), Sparkles, Orange, Eye Position(Event Player), Multiply(2, Player Variable(Event Player, U)),
			Visible To Position and Radius);
		Create Effect(Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Compare(Player Variable(Event Player, U), !=,
			-1.000)), Good Aura, Orange, Eye Position(Event Player), Player Variable(Event Player, U), Visible To Position and Radius);
		Create Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Energy Sound, White,
			Event Player, 100, Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(0, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(0, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(0, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(0, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(1, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(1, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(1, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(1, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(2, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(2, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(2, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(2, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(3, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(3, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(3, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(3, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(4, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(4, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(4, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(4, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(5, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(5, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(5, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(5, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(6, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(6, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(6, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(6, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(7, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(7, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(7, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(7, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(8, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(8, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(8, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(8, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(9, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(9, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(9, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(9, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(10, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(10, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(10, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(10, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(11, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(11, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(11, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(11, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(12, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(12, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(12, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(12, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(13, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(13, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(13, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(13, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(14, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(14, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(14, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(14, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		Create Beam Effect(Filtered Array(All Players(All Teams), Compare(Player Variable(Event Player, U), !=, -1.000)), Grapple Beam,
			Add(Eye Position(Event Player), Multiply(Add(Multiply(Sine From Degrees(Multiply(15, 22.500)), Direction From Angles(
			Horizontal Facing Angle Of(Event Player), Add(Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(
			Multiply(15, 22.500)), Direction From Angles(Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(
			Event Player, U))), Add(Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Multiply(Add(
			Multiply(Sine From Degrees(Multiply(15, 22.500)), Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(
			Vertical Facing Angle Of(Event Player), -90.000))), Multiply(Cosine From Degrees(Multiply(15, 22.500)), Direction From Angles(
			Add(Horizontal Facing Angle Of(Event Player), -90.000), 0))), Player Variable(Event Player, U))), Blue,
			Visible To Position and Radius);
		disabled Create Beam Effect(Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), Compare(Player Variable(Event Player, U),
			==, -1.000)), Good Beam, Eye Position(Event Player), Add(Eye Position(Event Player), Multiply(Facing Direction Of(
			Event Player), 200)), Orange, Visible To Position and Radius);
		disabled Create Beam Effect(Filtered Array(All Players(Team Of(Event Player)), Compare(Player Variable(Event Player, U), !=, -1.000)),
			Good Beam, Eye Position(Event Player), Add(Eye Position(Event Player), Multiply(Facing Direction Of(Event Player), 200)), Blue,
			Visible To Position and Radius);
	}
}

rule("Void grip cancelling abilities list (A = secondary fire, B = ability 1, C = ability 2, D = ultimate)")
{
	event
	{
		Ongoing - Global;
	}

	actions
	{
		Set Global Variable At Index(A, 0, Hero(Doomfist));
		Set Global Variable At Index(A, 1, Hero(Junkrat));
		Set Global Variable At Index(A, 2, Hero(Wrecking Ball));
		Set Global Variable At Index(B, 0, Hero(Ashe));
		Modify Global Variable(B, Append To Array, Hero(D.Va));
		Modify Global Variable(B, Append To Array, Hero(Doomfist));
		Modify Global Variable(B, Append To Array, Hero(Genji));
		Modify Global Variable(B, Append To Array, Hero(Mei));
		Modify Global Variable(B, Append To Array, Hero(Mercy));
		Modify Global Variable(B, Append To Array, Hero(Moira));
		Modify Global Variable(B, Append To Array, Hero(Pharah));
		Modify Global Variable(B, Append To Array, Hero(Reinhardt));
		Modify Global Variable(B, Append To Array, Hero(Reaper));
		Modify Global Variable(B, Append To Array, Hero(Tracer));
		Modify Global Variable(B, Append To Array, Hero(Widowmaker));
		Modify Global Variable(B, Append To Array, Hero(Winston));
		Modify Global Variable(B, Append To Array, Hero(Orisa));
		Set Global Variable At Index(C, 0, Hero(Doomfist));
		Modify Global Variable(C, Append To Array, Hero(Sombra));
		Modify Global Variable(C, Append To Array, Hero(Reaper));
		Modify Global Variable(C, Append To Array, Hero(Tracer));
		Set Global Variable At Index(D, 0, Hero(Doomfist));
		Modify Global Variable(D, Append To Array, Hero(D.Va));
		Modify Global Variable(D, Append To Array, Hero(Mercy));
		Modify Global Variable(D, Append To Array, Hero(Sombra));
		Modify Global Variable(D, Append To Array, Hero(Lúcio));
		Modify Global Variable(D, Append To Array, Hero(Sigma));
		Modify Global Variable(D, Append To Array, Hero(Zenyatta));
	}
}

disabled rule("MOVEMENT")
{
	event
	{
		Ongoing - Global;
	}
}

rule("Gravity on")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Altitude Of(Event Player) >= 0.600;
		Player Variable(Event Player, U) == -1.000;
		Has Status(Event Player, Rooted) == False;
	}

	actions
	{
		Set Gravity(Event Player, Add(100, Multiply(50, Min(Player Variable(Event Player, S), 0))));
	}
}

rule("Gravity off")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Altitude Of(Event Player) < 0.600;
	}

	actions
	{
		Set Gravity(Event Player, 0);
	}
}

rule("Friction on")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Altitude Of(Event Player) < 0.600;
		Speed Of(Event Player) > 0.200;
		Throttle Of(Event Player) == Vector(0, 0, 0);
	}

	actions
	{
		Start Accelerating(Event Player, Multiply(Velocity Of(Event Player), -0.500), 10, 5.500, To World, Direction Rate and Max Speed);
	}
}

rule("Friction off")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Or(Compare(Speed Of(Event Player), <=, 0.200), Compare(Throttle Of(Event Player), !=, Vector(0, 0, 0))) == True;
	}

	actions
	{
		Stop Accelerating(Event Player);
	}
}

rule("Jump")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Altitude Of(Event Player) < 0.600;
		Is Button Held(Event Player, Jump) == True;
		Or(Is Dead(Event Player), Or(Has Status(Event Player, Rooted), Or(Has Status(Event Player, Stunned), Or(Has Status(Event Player,
			Knocked Down), Or(Has Status(Event Player, Asleep), Has Status(Event Player, Frozen)))))) == False;
		Player Variable(Event Player, U) == -1.000;
	}

	actions
	{
		Stop Accelerating(Event Player);
		Apply Impulse(Event Player, Up, 6, To World, Incorporate Contrary Motion);
	}
}

disabled rule("STELLAR WIND")
{
	event
	{
		Ongoing - Global;
	}
}

rule("Startup")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Is Button Held(Event Player, Ability 1) == True;
		Player Variable(Event Player, S) == 0;
		Or(Is Dead(Event Player), Or(Has Status(Event Player, Hacked), Or(Has Status(Event Player, Stunned), Or(Has Status(Event Player,
			Knocked Down), Or(Has Status(Event Player, Asleep), Or(Has Status(Event Player, Frozen), Has Status(Event Player, Rooted)))))))
			== False;
	}

	actions
	{
		Wait(0.016, Ignore Condition);
		Skip If(Not(Is Button Held(Event Player, Ability 1)), 1);
		Loop If Condition Is True;
		Stop Chasing Player Variable(Event Player, S);
		Set Player Variable(Event Player, S, -1.000);
		Start Camera(Event Player, Ray Cast Hit Position(Add(Eye Position(Event Player), Up), Add(Eye Position(Event Player), Add(Up,
			Multiply(Facing Direction Of(Event Player), -3.000))), Null, All Players(All Teams), False), Add(Eye Position(Event Player),
			Add(Up, Multiply(Facing Direction Of(Event Player), 1))), 15);
		Set Move Speed(Event Player, 165);
		Play Effect(All Players(All Teams), Good Pickup Effect, Sky Blue, Event Player, 0.500);
		Play Effect(All Players(All Teams), Explosion Sound, White, Event Player, 50);
	}
}

rule("End")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Player Variable(Event Player, S) == 2;
	}

	actions
	{
		Chase Player Variable At Rate(Event Player, S, 0, 1, Destination and Rate);
		Skip If(Compare(Player Variable(Event Player, U), !=, -1.000), 3);
		Stop Camera(Event Player);
		Skip If(Compare(Altitude Of(Event Player), <, 0.600), 1);
		Set Gravity(Event Player, 100);
		Set Move Speed(Event Player, 100);
		Play Effect(All Players(All Teams), Explosion Sound, White, Event Player, 50);
	}
}

rule("Manual cancel")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Is Button Held(Event Player, Ability 1) == True;
		Player Variable(Event Player, S) == -1.000;
	}

	actions
	{
		Wait(0.016, Ignore Condition);
		Skip If(Not(Is Button Held(Event Player, Ability 1)), 1);
		Loop If Condition Is True;
		Set Player Variable(Event Player, S, 2);
	}
}

rule("Ability cancel")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Or(Is Button Held(Event Player, Primary Fire), Or(Is Button Held(Event Player, Secondary Fire), Or(Compare(Player Variable(
			Event Player, G), ==, -1.000), Is Using Ultimate(Event Player)))) == True;
		Player Variable(Event Player, S) == -1.000;
	}

	actions
	{
		Set Player Variable(Event Player, S, 2);
	}
}

rule("CC or death cancel")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Or(Is Dead(Event Player), Or(Has Status(Event Player, Hacked), Or(Has Status(Event Player, Stunned), Or(Has Status(Event Player,
			Knocked Down), Or(Has Status(Event Player, Asleep), Or(Has Status(Event Player, Frozen), Has Status(Event Player, Rooted)))))))
			== True;
		Player Variable(Event Player, S) == -1.000;
	}

	actions
	{
		Set Player Variable(Event Player, S, 2);
	}
}

disabled rule("ASTRAL MARK")
{
	event
	{
		Ongoing - Global;
	}
}

rule("Give mark")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Player Variable(Event Player, M) == 0;
		Distance Between(Event Player, Player Closest To Reticle(Event Player, Team Of(Event Player))) <= 30;
		Is Button Held(Event Player, Secondary Fire) == True;
		Is In View Angle(Event Player, Player Closest To Reticle(Event Player, Team Of(Event Player)), 15) == True;
		Or(Is Dead(Event Player), Or(Has Status(Event Player, Hacked), Or(Has Status(Event Player, Stunned), Or(Has Status(Event Player,
			Knocked Down), Or(Has Status(Event Player, Asleep), Has Status(Event Player, Frozen)))))) == False;
		Is Alive(Player Closest To Reticle(Event Player, Team Of(Event Player))) == True;
		Player Variable(Event Player, G) != -1.000;
	}

	actions
	{
		Set Player Variable(Event Player, M, 6.500);
		Set Player Variable(Player Closest To Reticle(Event Player, Team Of(Event Player)), T, 10);
		Set Player Variable(Player Closest To Reticle(Event Player, Team Of(Event Player)), H, Event Player);
		Heal(Player Closest To Reticle(Event Player, Team Of(Event Player)), Event Player, 30);
		Chase Player Variable At Rate(Player Closest To Reticle(Event Player, Team Of(Event Player)), T, 0, 1, Destination and Rate);
		Start Heal Over Time(Event Player, Event Player, 10, 12);
		Play Effect(All Players(All Teams), Good Explosion, Yellow, Player Closest To Reticle(Event Player, Team Of(Event Player)), 0.500);
		Play Effect(Event Player, Buff Explosion Sound, White, Event Player, 30);
	}
}

rule("Receive healing from mark (T = time remaining on mark, H = healer)")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Player Variable(Event Player, T) > 0;
	}

	actions
	{
		Heal(Event Player, Player Variable(Event Player, H), 4.400);
		Wait(0.199, Ignore Condition);
		Loop If Condition Is True;
	}
}

rule("Create mark icons (V = mark visual, W = healer mark visual)")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Player Variable(Event Player, T) > 0;
	}

	actions
	{
		Create Icon(Filtered Array(Remove From Array(All Players(All Teams), Player Variable(Event Player, H)), Is In Line of Sight(
			Current Array Element, Event Player, Barriers Do Not Block LOS)), Event Player, Spade, Visible To and Position, Yellow, False);
		Set Player Variable(Event Player, V, Last Created Entity);
		Create Icon(Player Variable(Event Player, H), Event Player, Spade, Visible To and Position, Yellow, False);
		Set Player Variable(Event Player, W, Last Created Entity);
	}
}

rule("Destroy mark icons")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Or(Compare(Player Variable(Event Player, T), ==, 0), Is Dead(Event Player)) == True;
	}

	actions
	{
		Destroy Icon(Player Variable(Event Player, V));
		Destroy Icon(Player Variable(Event Player, W));
	}
}

disabled rule("VOID GRIP")
{
	event
	{
		Ongoing - Global;
	}
}

rule("Grasp enemy (E = targeted enemy, D = grip DoT)")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Player Variable(Event Player, G) == 0;
		Distance Between(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) <= 20;
		Is Button Held(Event Player, Ability 2) == True;
		Is In View Angle(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player))), 15) == True;
		Is In Line of Sight(Event Player, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player))),
			Enemy Barriers Block LOS) == True;
		Or(Is Dead(Event Player), Or(Has Status(Event Player, Hacked), Or(Has Status(Event Player, Stunned), Or(Has Status(Event Player,
			Knocked Down), Or(Has Status(Event Player, Asleep), Has Status(Event Player, Frozen)))))) == False;
		Player Variable(Event Player, S) != -1.000;
		Is Alive(Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player)))) == True;
	}

	actions
	{
		Stop Chasing Player Variable(Event Player, G);
		Set Player Variable(Event Player, G, -1.000);
		Set Player Variable(Event Player, E, Player Closest To Reticle(Event Player, Opposite Team Of(Team Of(Event Player))));
		Start Damage Over Time(Player Variable(Event Player, E), Event Player, 2.500, 14.400);
		Set Player Variable(Event Player, D, Last Damage Over Time ID);
		Start Forcing Throttle(Player Variable(Event Player, E), 0, 0, 0, 0, 0, 0);
		Set Status(Player Variable(Event Player, E), Event Player, Rooted, 0.200);
		Apply Impulse(Player Variable(Event Player, E), Up, 10, To World, Cancel Contrary Motion);
		Start Accelerating(Player Variable(Event Player, E), Vector(Multiply(X Component Of(Velocity Of(Player Variable(Event Player, E))),
			-1.000), 5, Multiply(Z Component Of(Velocity Of(Player Variable(Event Player, E))), -1.000)), 50, 1, To World,
			Direction Rate and Max Speed);
		Disallow Button(Event Player, Primary Fire);
		Disallow Button(Event Player, Secondary Fire);
		Disallow Button(Event Player, Ability 1);
		Disallow Button(Event Player, Ultimate);
		Set Status(Player Variable(Event Player, E), Event Player, Burning, 2.500);
		Play Effect(All Players(All Teams), Ring Explosion, Red, Position Of(Player Variable(Event Player, E)), 3);
		Play Effect(All Players(All Teams), Bad Explosion, Red, Player Variable(Event Player, E), 1);
		Play Effect(All Players(All Teams), Buff Explosion Sound, Red, Player Variable(Event Player, E), 50);
		Play Effect(All Players(All Teams), Buff Explosion Sound, Red, Event Player, 50);
		Wait(2.500, Ignore Condition);
		Skip If(Compare(Player Variable(Event Player, E), ==, Null), 1);
		Set Player Variable(Event Player, G, 12);
	}
}

rule("Release enemy")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Player Variable(Event Player, G) > 0;
	}

	actions
	{
		Chase Player Variable At Rate(Event Player, G, 0, 1, Destination and Rate);
		Stop Damage Over Time(Player Variable(Event Player, D));
		Stop Forcing Throttle(Player Variable(Event Player, E));
		Stop Accelerating(Player Variable(Event Player, E));
		Clear Status(Player Variable(Event Player, E), Rooted);
		Clear Status(Player Variable(Event Player, E), Burning);
		Set Player Variable(Event Player, E, Null);
		Allow Button(Event Player, Primary Fire);
		Allow Button(Event Player, Secondary Fire);
		Allow Button(Event Player, Ability 1);
		Allow Button(Event Player, Ultimate);
	}
}

rule("CC or death cancel")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Or(Is Dead(Event Player), Or(Has Status(Event Player, Hacked), Or(Has Status(Event Player, Stunned), Or(Has Status(Event Player,
			Knocked Down), Or(Has Status(Event Player, Asleep), Has Status(Event Player, Frozen)))))) == True;
		Player Variable(Event Player, G) == -1.000;
	}

	actions
	{
		Set Player Variable(Event Player, G, 12);
	}
}

rule("Enemy ability cancel")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Player Variable(Event Player, G) == -1.000;
		Or(Or(And(Is Firing Secondary(Player Variable(Event Player, E)), Array Contains(Global Variable(A), Hero Of(Player Variable(
			Event Player, E)))), And(Is Using Ability 1(Player Variable(Event Player, E)), Array Contains(Global Variable(B), Hero Of(
			Player Variable(Event Player, E))))), Or(And(Is Using Ability 2(Player Variable(Event Player, E)), Array Contains(
			Global Variable(C), Hero Of(Player Variable(Event Player, E)))), And(Is Using Ultimate(Player Variable(Event Player, E)),
			Array Contains(Global Variable(D), Hero Of(Player Variable(Event Player, E)))))) == True;
	}

	actions
	{
		Set Player Variable(Event Player, G, 12);
	}
}

disabled rule("THROUGH TIME AND SPACE")
{
	event
	{
		Ongoing - Global;
	}
}

rule("Notification")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Ultimate Charge Percent(Event Player) == 100;
	}

	actions
	{
		Big Message(Event Player, String("{0}: {1}", String("{0} {1}", String("Ultimate Ability", Null, Null, Null), String("Ready", Null,
			Null, Null), Null), Custom String("Through Time and Space", Null, Null, Null), Null));
	}
}

rule("Startup (U = is using ult, L = struck by laser)")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Hero Of(Event Player) == Hero(Soldier: 76);
		Is Using Ultimate(Event Player) == True;
	}

	actions
	{
		Set Player Variable(Event Player, U, 0);
		Set Gravity(Event Player, 0);
		Apply Impulse(Event Player, Down, 0.001, To World, Cancel Contrary Motion);
		Apply Impulse(Event Player, Up, 0.001, To World, Cancel Contrary Motion);
		Apply Impulse(Event Player, Backward, 0.001, To World, Cancel Contrary Motion);
		Apply Impulse(Event Player, Forward, 0.001, To World, Cancel Contrary Motion);
		Apply Impulse(Event Player, Right, 0.001, To World, Cancel Contrary Motion);
		Apply Impulse(Event Player, Left, 0.001, To World, Cancel Contrary Motion);
		Start Facing(Event Player, Facing Direction Of(Event Player), 0, To World, None);
		Set Status(Event Player, Null, Rooted, 1.600);
		Set Status(Event Player, Null, Burning, 1.600);
		Set Status(Event Player, Null, Phased Out, 1.200);
		Skip If(Compare(Player Variable(Event Player, J), !=, Null), 1);
		Start Camera(Event Player, Ray Cast Hit Position(Add(Eye Position(Event Player), Up), Add(Eye Position(Event Player), Add(Multiply(
			Up, 0.250), Multiply(Facing Direction Of(Event Player), -3.000))), Null, All Players(All Teams), False), Add(Eye Position(
			Event Player), Add(Multiply(Up, 0.250), Multiply(Facing Direction Of(Event Player), 1))), 30);
		Chase Player Variable At Rate(Event Player, U, 1, 1.333, Destination and Rate);
		Wait(0.600, Ignore Condition);
		Chase Player Variable Over Time(Event Player, U, 1, 0.600, Destination and Duration);
		Wait(0.600, Ignore Condition);
		Stop Chasing Player Variable(Event Player, U);
		Play Effect(All Players(All Teams), Ring Explosion Sound, White, Event Player, 100);
		Play Effect(All Players(All Teams), Ring Explosion Sound, White, Event Player, 100);
		Play Effect(All Players(All Teams), Ring Explosion Sound, White, Event Player, 100);
		Play Effect(All Players(All Teams), Ring Explosion Sound, White, Event Player, 100);
		Play Effect(All Players(All Teams), Ring Explosion Sound, White, Event Player, 100);
		Play Effect(All Players(All Teams), Good Explosion, Blue, Event Player, 5);
		Set Player Variable(Filtered Array(All Players(Opposite Team Of(Team Of(Event Player))), And(And(Compare(Multiply(Distance Between(
			Eye Position(Event Player), Divide(Add(Eye Position(Current Array Element), Current Array Element), 2)), Sine From Degrees(
			Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Divide(Add(Eye Position(
			Current Array Element), Current Array Element), 2))))), <=, 1.250), Compare(Multiply(Distance Between(Eye Position(
			Event Player), Divide(Add(Eye Position(Current Array Element), Current Array Element), 2)), Cosine From Degrees(
			Angle Between Vectors(Facing Direction Of(Event Player), Direction Towards(Eye Position(Event Player), Divide(Add(Eye Position(
			Current Array Element), Current Array Element), 2))))), <=, 200)), Is In View Angle(Event Player, Divide(Add(Eye Position(
			Current Array Element), Current Array Element), 2), 180))), L, Event Player);
		Set Player Variable(Event Player, U, -1.000);
		Wait(0.400, Ignore Condition);
		Skip If(Compare(Altitude Of(Event Player), <, 0.600), 1);
		Set Gravity(Event Player, 100);
		Stop Facing(Event Player);
		Skip If(Compare(Player Variable(Event Player, J), !=, Null), 1);
		Stop Camera(Event Player);
	}
}

rule("Deal laser damage")
{
	event
	{
		Ongoing - Each Player;
		All;
		All;
	}

	conditions
	{
		Player Variable(Event Player, L) != Null;
	}

	actions
	{
		Damage(Event Player, Player Variable(Event Player, L), Multiply(250, Divide(100, 46)));
		Play Effect(All Players(All Teams), Bad Explosion, Red, Event Player, 2);
		Play Effect(All Players(All Teams), Ring Explosion Sound, Red, Event Player, 50);
		Play Effect(All Players(All Teams), Buff Explosion Sound, Red, Event Player, 50);
		Set Player Variable(Event Player, L, Null);
	}
}