Return to post
settings
{
main
{
Description: "Dealing damage creates a small sphere, this can be used to confirm the size of hitboxes. R - Remove all dots created by dealing damage. F - Change the 2 leftmost bots, useful for comparing hitbox sizes."
Description: "Moira - Hitbox and ability visualizer. By Lotto. _____________________________________ Dealing damage creates dots for easier comparison of the hitboxes. Reload - Remove all dots created by dealing damage. Interact - Change the 2 leftmost bots. The green text highlights the active hitbox."
}
lobby
{
Max Team 1 Players: 4
Max Team 2 Players: 8
Max Team 2 Players: 0
}
modes
{
Assault
{
Limit Roles: 2 Of Each Role Per Team
enabled maps
{
}
}
Control
{
Limit Roles: 2 Of Each Role Per Team
enabled maps
{
}
}
Escort
{
Limit Roles: 2 Of Each Role Per Team
enabled maps
{
}
}
Hybrid
{
Limit Roles: 2 Of Each Role Per Team
enabled maps
{
}
}
Skirmish
{
enabled maps
{
Workshop Chamber
}
}
General
{
Hero Limit: Off
Limit Roles: 2 Of Each Role Per Team
}
}
heroes
{
General
{
Moira
{
Biotic Orb Cooldown Time: 70%
}
}
}
extensions
{
Play More Effects
}
}
variables
{
global:
0: bot
1: smallHitbox
2: bigHitbox
3: lastText
player:
0: currentHero
1: entities
2: healEntities
3: beamEntities
5: RayCast
6: angle
7: heals
8: H0
9: H1
10: H2
11: H3
12: H4
13: H5
14: H6
15: H7
16: H8
18: circleEntityHealing
20: circleEntityDamage
}
subroutines
{
0: Highlight
1: CreateUltBeams
2: DestroyUltBeams
3: DestroyDots
4: DestroyHealEffects
}
rule("init")
{
event
{
Ongoing - Global;
}
actions
{
Create HUD Text(All Players(All Teams), Custom String(""), Null, Custom String("Press R to remove dots (from damage done)"), Left,
0, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Custom String(""), Custom String("Press [{0}] to remove dots (from damage done)",
Input Binding String(Button(Reload))), Null, Left, 1, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(All Players(All Teams), Custom String("Hero {0} - {1}", Host Player.currentHero + 1,
All Heroes[Host Player.currentHero]), Custom String("The green text highlights the active hitbox."), Custom String(
"{0} Press F to change the active hero.", Icon String(Arrow: Left)), Left, 0, Color(White), Color(Green), Color(White),
"{0} Press [{1}] to change the active hero.\n([{2}] + [{1}] to go back)", Icon String(Arrow: Left), Input Binding String(
Button(Interact)), Input Binding String(Button(Crouch))), Left, 0, Color(White), Color(Green), Color(White),
Visible To and String, Default Visibility);
Global.smallHitbox = Empty Array;
Global.bigHitbox = Empty Array;
Global.smallHitbox = Array(Hero(Reaper), Hero(Tracer), Hero(Mercy), Hero(Hanzo), Hero(Pharah), Hero(Widowmaker), Hero(Symmetra),
Hero(Zenyatta), Hero(Genji), Hero(McCree), Hero(Junkrat), Hero(Zarya), Hero(Soldier: 76), Hero(Lúcio), Hero(Mei), Hero(Sombra),
Hero(Ana), Hero(Brigitte), Hero(Moira), Hero(Ashe), Hero(Echo), Hero(Baptiste));
Global.bigHitbox = Array(Hero(Reinhardt), Hero(Bastion), Hero(Roadhog), Hero(Doomfist), Hero(Orisa));
Global.bot = Empty Array;
Wait(1, Ignore Condition);
Start Forcing Player To Be Hero(Host Player, Hero(Moira));
Wait(1, Ignore Condition);
disabled Start Forcing Player To Be Hero(Host Player, Hero(Moira));
disabled Wait(1, Ignore Condition);
Start Forcing Player To Be Hero(Host Player, Hero(Moira));
Create In-World Text(All Players(All Teams), Custom String(
"Normal character hitbox is used by:\r\n{0} Biotic Grasp (Primary fire - Healing) \r\n{1} Biotic Orb (Ability 2 - Damage and healing)",
Ability Icon String(Hero(Moira), Button(Primary Fire)), Ability Icon String(Hero(Moira), Button(Ability 2))), Vector(-10, 12,
-20), 1.500, Do Not Clip, Visible To Position and String, Custom Color(120, 242, 242, 255), Default Visibility);
Create In-World Text(All Players(All Teams), Custom String(
"'Capsule' shaped hitbox is used by:\r\n{0} Biotic Grasp (Secondary fire - Damage)\r\n{1} Coalescence (Ultimate - Damage and healing)",
"'Capsule' shaped hurtbox is hit by:\r\n{0} Biotic Grasp (Secondary fire - Damage)\r\n{1} Coalescence (Ultimate - Damage and healing)",
Ability Icon String(Hero(Moira), Button(Secondary Fire)), Ability Icon String(Hero(Moira), Button(Ultimate))), Vector(10, 12,
-20), 1.500, Do Not Clip, Visible To Position and String, Custom Color(250, 85, 85, 250), Default Visibility);
Wait(0.250, Ignore Condition);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(20, 0, -2.502), Vector(20, 6, -2.500), Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(20, 6, -12.500), Vector(20, 6, -2.500), Color(White),
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(20, 0, -12.502), Vector(20, 6, -12.500), Color(White),
Visible To Position and Radius);
Pause Match Time;
}
}
rule("player init")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Has Spawned(Event Player) == True;
}
actions
{
Event Player.entities = Empty Array;
Teleport(Event Player, Vector(8, 1, -5));
Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Vector(19.495, 3, -5)), To World);
Set Status(Event Player, Null, Phased Out, 9999);
Set Ultimate Charge(Event Player, 100);
Wait(Random Real(0.016, 0.300), Ignore Condition);
Chase Player Variable At Rate(Event Player, angle, 100000000, 720, Destination and Rate);
Disable Game Mode HUD(Event Player);
Start Forcing Player To Be Hero(Host Player, Hero(Moira));
}
}
rule("Dealt damage")
{
event
{
Player Dealt Damage;
All;
All;
}
actions
{
Heal(Victim, Null, Event Damage);
If(Event Ability == Button(Ability 2));
Abort;
End;
Event Player.T = Distance Between(Eye Position(Event Player), Eye Position(Victim)) / Cosine From Degrees(Angle Between Vectors(
Vector Towards(Eye Position(Event Player), Eye Position(Victim)), Facing Direction Of(Event Player)));
Event Player.R = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player)
* Event Player.T, All Players(All Teams), Event Player, True);
If(Count Of(Event Player.entities) >= 85);
Destroy Effect(First Of(Event Player.entities));
Modify Player Variable(Event Player, entities, Remove From Array By Index, 0);
End;
Create Effect(All Players(All Teams), Sphere, Color(Orange), Event Player.R, 0.020, None);
Modify Player Variable(Event Player, entities, Append To Array, Last Created Entity);
If(Is Using Ultimate(Event Player));
Play Effect(All Players(All Teams), Bad Explosion, Color(White), Event Player.R, 0.100);
End;
}
}
rule("Dealt healing")
{
event
{
Player Dealt Healing;
All;
All;
}
conditions
{
Event Healing != 0;
}
actions
{
Damage(Healee, Null, Event Healing);
If(Is Using Ultimate(Event Player));
Event Player.R = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(Event Player)
* 200, All Players(All Teams), Event Player, True);
Play Effect(All Players(All Teams), Bad Explosion, Color(Lime Green), Event Player.R, 0.100);
End;
}
}
rule("Reload (destroy dots)")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Button(Reload)) == True;
}
actions
{
Call Subroutine(DestroyDots);
}
}
rule("[sub] destroy dots")
{
event
{
Subroutine;
DestroyDots;
}
actions
{
For Player Variable(Event Player, W, 0, Count Of(Event Player.entities), 1);
Destroy Effect(Event Player.entities[Event Player.W]);
End;
Event Player.entities = Empty Array;
}
}
rule("F (change bot hero)")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Button(Interact)) == True;
}
actions
{
If(Event Player.currentHero >= 31);
Event Player.currentHero = 0;
If(Is Button Held(Event Player, Button(Crouch)));
If(Event Player.currentHero <= 0);
Event Player.currentHero = 31;
Else;
Event Player.currentHero -= 1;
End;
Else;
Event Player.currentHero += 1;
If(Event Player.currentHero >= 31);
Event Player.currentHero = 0;
Else;
Event Player.currentHero += 1;
End;
End;
Start Forcing Player To Be Hero(Global.bot[0], All Heroes[Event Player.currentHero]);
Start Forcing Player To Be Hero(Global.bot[1], All Heroes[Event Player.currentHero]);
If(All Heroes[Event Player.currentHero] == Hero(Winston));
Start Forcing Player To Be Hero(Global.bot[5], Hero(Winston));
Else If(All Heroes[Event Player.currentHero] == Hero(Sigma));
Start Forcing Player To Be Hero(Global.bot[5], Hero(Sigma));
End;
Call Subroutine(Highlight);
Wait(0.400, Ignore Condition);
}
}
rule("[sub] highlight bot")
{
event
{
Subroutine;
Highlight;
}
actions
{
Destroy In-World Text(Global.lastText);
If(Array Contains(Global.smallHitbox, All Heroes[Host Player.currentHero]));
Create In-World Text(All Players(All Teams), Custom String("2m x 3m"), Vector(20, 3.800, -5), 1.500, Do Not Clip,
Visible To Position and String, Color(Green), Default Visibility);
Else If(Array Contains(Global.bigHitbox, All Heroes[Host Player.currentHero]));
Create In-World Text(All Players(All Teams), Custom String("2.4m x 3.3m"), Vector(20, 3.800, -10), 1.500, Do Not Clip,
Visible To Position and String, Color(Green), Default Visibility);
Else If(All Heroes[Host Player.currentHero] == Hero(Torbjörn));
Create In-World Text(All Players(All Teams), Custom String("2m x 2.55m"), Vector(20, 3.800, 0), 1.500, Do Not Clip,
Visible To Position and String, Color(Green), Default Visibility);
Else If(All Heroes[Host Player.currentHero] == Hero(Wrecking Ball));
Create In-World Text(All Players(All Teams), Custom String("3m x 3m"), Vector(20, 3.800, 5), 1.500, Do Not Clip,
Visible To Position and String, Color(Green), Default Visibility);
Else If(All Heroes[Host Player.currentHero] == Hero(D.Va));
Create In-World Text(All Players(All Teams), Custom String("2.4m x 3m"), Vector(20, 3.800, 10), 1.500, Do Not Clip,
Visible To Position and String, Color(Green), Default Visibility);
Else If(All Heroes[Host Player.currentHero] == Hero(Sigma));
Create In-World Text(All Players(All Teams), Custom String("2.4m x 3.5m"), Vector(20, 4.200, 15), 1.500, Do Not Clip,
Visible To Position and String, Color(Green), Default Visibility);
Else If(All Heroes[Host Player.currentHero] == Hero(Winston));
Create In-World Text(All Players(All Teams), Custom String("2.4m x 3.5m"), Vector(20, 4.200, 15), 1.500, Do Not Clip,
Visible To Position and String, Color(Green), Default Visibility);
End;
Global.lastText = Last Text ID;
}
}
rule("create Big hitbox bot")
rule("create Big hurtbox bot")
{
event
{
Ongoing - Global;
}
actions
{
Wait(1, Ignore Condition);
Create Dummy Bot(First Of(All Heroes), Team 2, -1, Vector(19.495, 0, -10), Vector(-0.996, -0.087, 0));
Modify Global Variable(bot, Append To Array, Last Created Entity);
Set Gravity(Global.bot[0], 0);
Wait(0.500, Ignore Condition);
Set Status(Global.bot[0], Null, Unkillable, 9999);
Start Forcing Player Position(Global.bot[0], Vector(19.495, 0.900, -10), False);
Wait(0.500, Ignore Condition);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[0]) + Vector(0, 1.600, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[0]) + Vector(0, 1.300, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[0]) + Vector(0, 1, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[0]) + Vector(0, 0.700, 0), 1.200,
Visible To Position and Radius);
Create In-World Text(All Players(All Teams), Custom String("2.4m x 3.3m"), Vector(20, 3.800, -10), 1.500, Do Not Clip,
Visible To Position and String, Color(White), Default Visibility);
}
}
rule("create Small hitbox bot")
rule("create Small hurtbox bot")
{
event
{
Ongoing - Global;
}
actions
{
Wait(1, Ignore Condition);
Create Dummy Bot(First Of(All Heroes), Team 2, -1, Vector(19.495, 0, -5), Vector(-0.996, -0.087, 0));
Modify Global Variable(bot, Append To Array, Last Created Entity);
Set Gravity(Global.bot[1], 0);
Wait(0.500, Ignore Condition);
Set Status(Global.bot[1], Null, Unkillable, 9999);
Start Forcing Player Position(Global.bot[1], Vector(19.495, 0.900, -5), False);
Wait(0.500, Ignore Condition);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[1]) + Vector(0, 1.500, 0), 1,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[1]) + Vector(0, 1.200, 0), 1,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[1]) + Vector(0, 0.900, 0), 1,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[1]) + Vector(0, 0.500, 0), 1,
Visible To Position and Radius);
Create In-World Text(All Players(All Teams), Custom String("2m x 3m"), Vector(20, 3.800, -5), 1.500, Do Not Clip,
Visible To Position and String, Color(White), Default Visibility);
Call Subroutine(Highlight);
}
}
rule("create torb bot")
{
event
{
Ongoing - Global;
}
actions
{
Wait(1, Ignore Condition);
Create Dummy Bot(Hero(Torbjörn), Team 2, -1, Vector(19.495, 0, 0), Vector(-0.996, -0.087, 0));
Modify Global Variable(bot, Append To Array, Last Created Entity);
Set Gravity(Global.bot[2], 0);
Wait(0.500, Ignore Condition);
Set Status(Global.bot[2], Null, Unkillable, 9999);
Start Forcing Player Position(Global.bot[2], Vector(19.495, 0.900, 0), False);
Wait(0.500, Ignore Condition);
Create Effect(All Players(All Teams), Sphere, Color(Blue), Position Of(Global.bot[2]) + Vector(0, 1.500, 0), 1,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[2]) + Vector(0, 1.050, 0), 1,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[2]) + Vector(0, 0.850, 0), 1,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[2]) + Vector(0, 0.500, 0), 1,
Visible To Position and Radius);
Create In-World Text(All Players(All Teams), Custom String("2m x 2.55m"), Vector(20, 3.800, 0), 1.500, Do Not Clip,
Visible To Position and String, Color(White), Default Visibility);
}
}
rule("create hammond bot")
{
event
{
Ongoing - Global;
}
actions
{
Wait(1, Ignore Condition);
Create Dummy Bot(Hero(Wrecking Ball), Team 2, -1, Vector(19.495, 0, 5), Vector(-0.996, -0.087, 0));
Modify Global Variable(bot, Append To Array, Last Created Entity);
Set Gravity(Global.bot[3], 0);
Wait(0.500, Ignore Condition);
Set Status(Global.bot[3], Null, Unkillable, 9999);
Start Forcing Player Position(Global.bot[3], Vector(19.495, 0.900, 5), False);
Wait(0.500, Ignore Condition);
Create Effect(All Players(All Teams), Sphere, Color(Red), Global.bot[3], 1.500, Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Blue), Position Of(Global.bot[3]) + Vector(0, 1.600, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Blue), Position Of(Global.bot[3]) + Vector(0, 1.300, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Blue), Position Of(Global.bot[3]) + Vector(0, 1, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Blue), Position Of(Global.bot[3]) + Vector(0, 0.750, 0), 1.200,
Visible To Position and Radius);
Create In-World Text(All Players(All Teams), Custom String("3m x 3m"), Vector(20, 3.800, 5), 1.500, Do Not Clip,
Visible To Position and String, Color(White), Default Visibility);
}
}
rule("create D.va bot")
{
event
{
Ongoing - Global;
}
actions
{
Wait(1, Ignore Condition);
Create Dummy Bot(Hero(D.Va), Team 2, -1, Vector(19.495, 0, 10), Vector(-0.996, -0.087, 0));
Modify Global Variable(bot, Append To Array, Last Created Entity);
Set Gravity(Global.bot[4], 0);
Wait(0.500, Ignore Condition);
Set Status(Global.bot[4], Null, Unkillable, 9999);
Start Forcing Player Position(Global.bot[4], Vector(19.495, 0.900, 10), False);
Wait(0.500, Ignore Condition);
Create Effect(All Players(All Teams), Sphere, Color(Blue), Position Of(Global.bot[4]) + Vector(0, 1.600, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[4]) + Vector(0, 1.300, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[4]) + Vector(0, 1, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[4]) + Vector(0, 0.700, 0), 1.200,
Visible To Position and Radius);
Create In-World Text(All Players(All Teams), Custom String("2.4m x 3m"), Vector(20, 3.800, 10), 1.500, Do Not Clip,
Visible To Position and String, Color(White), Default Visibility);
}
}
rule("create sigma/winston bot")
{
event
{
Ongoing - Global;
}
actions
{
Wait(1, Ignore Condition);
Create Dummy Bot(Hero(Sigma), Team 2, -1, Vector(19.495, 0, 15), Vector(-0.996, -0.087, 0));
Modify Global Variable(bot, Append To Array, Last Created Entity);
Set Gravity(Global.bot[5], 0);
Wait(1, Ignore Condition);
Set Status(Global.bot[5], Null, Unkillable, 9999);
Start Forcing Player Position(Global.bot[5], Vector(19.495, 0.900, 15), False);
Wait(0.500, Ignore Condition);
Create Effect(All Players(All Teams), Sphere, Color(Blue), Position Of(Global.bot[5]) + Vector(0, 1.600, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[5]) + Vector(0, 1.800, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[5]) + Vector(0, 1.300, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[5]) + Vector(0, 1, 0), 1.200,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Red), Position Of(Global.bot[5]) + Vector(0, 0.700, 0), 1.200,
Visible To Position and Radius);
Create In-World Text(All Players(All Teams), Custom String("2.4m x 3.5m"), Vector(20, 4.200, 15), 1.500, Do Not Clip,
Visible To Position and String, Color(White), Default Visibility);
Create In-World Text(All Players(All Teams), Custom String("Winston / Sigma"), Vector(20, 4, 15), 0.700, Do Not Clip,
Visible To Position and String, Color(White), Default Visibility);
}
}
rule("create friendly ana bot")
{
event
{
Ongoing - Global;
}
actions
{
Wait(2, Ignore Condition);
Create Dummy Bot(Hero(Ana), Team 1, -1, Vector(-19.495, 1, 0), Vector(1, -0.087, 0));
Modify Global Variable(bot, Append To Array, Last Created Entity);
Set Gravity(Global.bot[6], 0);
Wait(0.500, Ignore Condition);
Set Status(Global.bot[6], Null, Unkillable, 9999);
Start Forcing Player Position(Global.bot[6], Vector(-19.495, 0.900, 0), False);
Wait(0.500, Ignore Condition);
Create Effect(All Players(All Teams), Sphere, Color(Rose), Position Of(Global.bot[6]) + Vector(0, 1.500, 0), 1,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Rose), Position Of(Global.bot[6]) + Vector(0, 1.200, 0), 1,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Rose), Position Of(Global.bot[6]) + Vector(0, 0.900, 0), 1,
Visible To Position and Radius);
Create Effect(All Players(All Teams), Sphere, Color(Rose), Position Of(Global.bot[6]) + Vector(0, 0.500, 0), 1,
Visible To Position and Radius);
Create In-World Text(All Players(All Teams), Custom String("2m x 3m"), Vector(-20, 3.800, 0), 1.500, Do Not Clip,
Visible To Position and String, Color(White), Default Visibility);
Set Player Health(Global.bot[6], 100);
}
}
rule("Ultimate")
{
event
{
Ongoing - Each Player;
All;
All;
Moira;
}
conditions
{
Is Button Held(Event Player, Button(Ultimate)) == True;
Hero Of(Event Player) == Hero(Moira);
}
actions
{
Call Subroutine(DestroyDots);
Disable Hero HUD(Event Player);
Event Player.RayCast = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
Event Player) * 30, All Players(All Teams), Event Player, True);
Start Camera(Event Player, Facing Direction Of(Event Player) * 0.200 + Ray Cast Hit Position(Eye Position(Event Player),
Eye Position(Event Player) + World Vector Of(Vector(0, 5, 2), Event Player, Rotation) + Facing Direction Of(Event Player)
* Vector(-3, -3, -3), All Players(All Teams), Event Player, True), Event Player.RayCast, 30);
Set Move Speed(Event Player, 40);
Call Subroutine(CreateUltBeams);
Wait(8.500, Ignore Condition);
Set Ultimate Charge(Event Player, 100);
Stop Camera(Event Player);
Call Subroutine(DestroyUltBeams);
Stop Facing(Event Player);
Set Move Speed(Event Player, 100);
Enable Hero HUD(Event Player);
}
}
rule("Ray cast Ultimate")
{
event
{
Ongoing - Each Player;
All;
All;
Moira;
}
conditions
{
Is Using Ultimate(Event Player) == True;
Hero Of(Event Player) == Hero(Moira);
}
actions
{
Event Player.RayCast = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
Event Player) * 30, All Players(All Teams), Event Player, True);
Wait(0.016, Ignore Condition);
Loop If Condition Is True;
}
}
rule("[sub] Create ult beams")
{
event
{
Subroutine;
CreateUltBeams;
}
actions
{
disabled Create Beam Effect(All Players(All Teams), Grapple Beam, Eye Position(Event Player) + 0.515 * (Cosine From Degrees(
Event Player.angle % 360) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360) * Direction From Angles(Horizontal Angle From Direction(
Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90)), Eye Position(
Event Player) + 0.515 * (Cosine From Degrees(Event Player.angle % 360) * Cross Product(Facing Direction Of(Event Player),
Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(
Facing Direction Of(Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90) + 58.250 * Facing Direction Of(Event Player)), Color(White), Position and Radius);
disabled Modify Player Variable(Event Player, beamEntities, Append To Array, Last Created Entity);
disabled Create Beam Effect(All Players(All Teams), Grapple Beam, Eye Position(Event Player) + 0.515 * (Cosine From Degrees(
Event Player.angle % 360 + 45) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360 + 45) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)), Eye Position(Event Player) + 0.515 * (Cosine From Degrees(Event Player.angle % 360 + 45)
* Cross Product(Facing Direction Of(Event Player), Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
Event Player)), Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90)) + Sine From Degrees(
Event Player.angle % 360 + 45) * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Event Player)),
Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90) + 58.250 * Facing Direction Of(Event Player)), Color(
White), Position and Radius);
disabled Modify Player Variable(Event Player, beamEntities, Append To Array, Last Created Entity);
disabled Create Beam Effect(All Players(All Teams), Grapple Beam, Eye Position(Event Player) + 0.515 * (Cosine From Degrees(
Event Player.angle % 360 + 90) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360 + 90) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)), Eye Position(Event Player) + 0.515 * (Cosine From Degrees(Event Player.angle % 360 + 90)
* Cross Product(Facing Direction Of(Event Player), Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
Event Player)), Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90)) + Sine From Degrees(
Event Player.angle % 360 + 90) * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Event Player)),
Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90) + 58.250 * Facing Direction Of(Event Player)), Color(
White), Position and Radius);
disabled Modify Player Variable(Event Player, beamEntities, Append To Array, Last Created Entity);
disabled Create Beam Effect(All Players(All Teams), Grapple Beam, Eye Position(Event Player) + 0.515 * (Cosine From Degrees(
Event Player.angle % 360 + 135) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360 + 135) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)), Eye Position(Event Player) + 0.515 * (Cosine From Degrees(Event Player.angle % 360 + 135)
* Cross Product(Facing Direction Of(Event Player), Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
Event Player)), Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90)) + Sine From Degrees(
Event Player.angle % 360 + 135) * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Event Player)),
Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90) + 58.250 * Facing Direction Of(Event Player)), Color(
White), Position and Radius);
disabled Modify Player Variable(Event Player, beamEntities, Append To Array, Last Created Entity);
disabled Create Beam Effect(All Players(All Teams), Grapple Beam, Eye Position(Event Player) + 0.515 * (Cosine From Degrees(
Event Player.angle % 360 + 180) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360 + 180) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)), Eye Position(Event Player) + 0.515 * (Cosine From Degrees(Event Player.angle % 360 + 180)
* Cross Product(Facing Direction Of(Event Player), Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
Event Player)), Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90)) + Sine From Degrees(
Event Player.angle % 360 + 180) * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Event Player)),
Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90) + 58.250 * Facing Direction Of(Event Player)), Color(
White), Position and Radius);
disabled Modify Player Variable(Event Player, beamEntities, Append To Array, Last Created Entity);
disabled Create Beam Effect(All Players(All Teams), Grapple Beam, Eye Position(Event Player) + 0.515 * (Cosine From Degrees(
Event Player.angle % 360 + 225) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360 + 225) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)), Eye Position(Event Player) + 0.515 * (Cosine From Degrees(Event Player.angle % 360 + 225)
* Cross Product(Facing Direction Of(Event Player), Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
Event Player)), Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90)) + Sine From Degrees(
Event Player.angle % 360 + 225) * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Event Player)),
Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90) + 58.250 * Facing Direction Of(Event Player)), Color(
White), Position and Radius);
disabled Modify Player Variable(Event Player, beamEntities, Append To Array, Last Created Entity);
disabled Create Beam Effect(All Players(All Teams), Grapple Beam, Eye Position(Event Player) + 0.515 * (Cosine From Degrees(
Event Player.angle % 360 + 270) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360 + 270) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)), Eye Position(Event Player) + 0.515 * (Cosine From Degrees(Event Player.angle % 360 + 270)
* Cross Product(Facing Direction Of(Event Player), Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
Event Player)), Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90)) + Sine From Degrees(
Event Player.angle % 360 + 270) * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Event Player)),
Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90) + 58.250 * Facing Direction Of(Event Player)), Color(
White), Position and Radius);
disabled Modify Player Variable(Event Player, beamEntities, Append To Array, Last Created Entity);
disabled Create Beam Effect(All Players(All Teams), Grapple Beam, Eye Position(Event Player) + 0.515 * (Cosine From Degrees(
Event Player.angle % 360 + 315) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360 + 315) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)), Eye Position(Event Player) + 0.515 * (Cosine From Degrees(Event Player.angle % 360 + 315)
* Cross Product(Facing Direction Of(Event Player), Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(
Event Player)), Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90)) + Sine From Degrees(
Event Player.angle % 360 + 315) * Direction From Angles(Horizontal Angle From Direction(Facing Direction Of(Event Player)),
Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90) + 58.250 * Facing Direction Of(Event Player)), Color(
White), Position and Radius);
disabled Modify Player Variable(Event Player, beamEntities, Append To Array, Last Created Entity);
For Global Variable(N, 0, 360, 45);
Create Beam Effect(All Players(All Teams), Grapple Beam, Eye Position(Event Player) + 0.515 * (Cosine From Degrees(
Event Player.angle % 360 + Evaluate Once(Global.N)) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)) + Sine From Degrees(Event Player.angle % 360 + Evaluate Once(Global.N)) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90)), Eye Position(Event Player) + 0.515 * (Cosine From Degrees(Event Player.angle % 360 + Evaluate Once(
Global.N)) * Cross Product(Facing Direction Of(Event Player), Direction From Angles(Horizontal Angle From Direction(
Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(Event Player)) - 90))
+ Sine From Degrees(Event Player.angle % 360 + Evaluate Once(Global.N)) * Direction From Angles(
Horizontal Angle From Direction(Facing Direction Of(Event Player)), Vertical Angle From Direction(Facing Direction Of(
Event Player)) - 90) + 58.250 * Facing Direction Of(Event Player)), Color(White), Position and Radius);
Modify Player Variable(Event Player, beamEntities, Append To Array, Last Created Entity);
End;
}
}
rule("[sub] Destroy ult beams")
{
event
{
Subroutine;
DestroyUltBeams;
}
actions
{
For Player Variable(Event Player, E, 0, Count Of(Event Player.beamEntities), 1);
Destroy Effect(Event Player.beamEntities[Event Player.E]);
End;
Event Player.beamEntities = Empty Array;
}
}
rule("Primary fire (heal) effects")
{
event
{
Ongoing - Each Player;
All;
All;
Moira;
}
conditions
{
Is Button Held(Event Player, Button(Primary Fire)) == True;
Hero Of(Event Player) == Hero(Moira);
Is Button Held(Event Player, Button(Secondary Fire)) == False;
Is Using Ultimate(Event Player) == False;
Is Using Ability 1(Event Player) == False;
Is Using Ability 2(Event Player) == False;
}
actions
{
Set Projectile Speed(Event Player, 100);
Create Effect(All Players(All Teams), Ring, Color(Yellow), Event Player, 15, Visible To Position and Radius);
Event Player.circleEntityHealing = Last Created Entity;
Wait(0.080, Ignore Condition);
While(Is Button Held(Event Player, Button(Primary Fire)));
Event Player.RayCast = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
Event Player) * 15, Empty Array, Event Player, False);
If(Event Player.heals == 0);
Event Player.H0 = Eye Position(Event Player);
Chase Player Variable At Rate(Event Player, H0, Event Player.RayCast, 40, None);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Event Player.H0, 0.750, Visible To Position and Radius);
Else If(Event Player.heals == 1);
Event Player.H1 = Eye Position(Event Player);
Chase Player Variable At Rate(Event Player, H1, Event Player.RayCast, 40, None);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Event Player.H1, 0.750, Visible To Position and Radius);
Else If(Event Player.heals == 2);
Event Player.H2 = Eye Position(Event Player);
Chase Player Variable At Rate(Event Player, H2, Event Player.RayCast, 40, None);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Event Player.H2, 0.750, Visible To Position and Radius);
Else If(Event Player.heals == 3);
Event Player.H3 = Eye Position(Event Player);
Chase Player Variable At Rate(Event Player, H3, Event Player.RayCast, 40, None);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Event Player.H3, 0.750, Visible To Position and Radius);
Else If(Event Player.heals == 4);
Event Player.H4 = Eye Position(Event Player);
Chase Player Variable At Rate(Event Player, H4, Event Player.RayCast, 40, None);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Event Player.H4, 0.750, Visible To Position and Radius);
Else If(Event Player.heals == 5);
Event Player.H5 = Eye Position(Event Player);
Chase Player Variable At Rate(Event Player, H5, Event Player.RayCast, 40, None);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Event Player.H5, 0.750, Visible To Position and Radius);
Else If(Event Player.heals == 6);
Event Player.H6 = Eye Position(Event Player);
Chase Player Variable At Rate(Event Player, H6, Event Player.RayCast, 40, None);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Event Player.H6, 0.750, Visible To Position and Radius);
Else If(Event Player.heals == 7);
Event Player.H7 = Eye Position(Event Player);
Chase Player Variable At Rate(Event Player, H7, Event Player.RayCast, 40, None);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Event Player.H7, 0.750, Visible To Position and Radius);
Else If(Event Player.heals >= 8);
Event Player.H8 = Eye Position(Event Player);
Chase Player Variable At Rate(Event Player, H8, Event Player.RayCast, 40, None);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Event Player.H8, 0.750, Visible To Position and Radius);
Event Player.heals = -1;
End;
If(Count Of(Event Player.healEntities) >= 8);
Destroy Effect(First Of(Event Player.healEntities));
Modify Player Variable(Event Player, healEntities, Remove From Array By Index, 0);
End;
Event Player.heals += 1;
Modify Player Variable(Event Player, healEntities, Append To Array, Last Created Entity);
Wait(0.048, Ignore Condition);
If(Ability Resource(Event Player, Button(Primary Fire)) <= 2);
Wait(0.500, Ignore Condition);
Call Subroutine(DestroyHealEffects);
While(Ability Resource(Event Player, Button(Primary Fire)) < 5.200);
Wait(0.048, Ignore Condition);
End;
End;
End;
Destroy Effect(Event Player.circleEntityHealing);
}
}
rule("Destroy heal effects")
{
event
{
Ongoing - Each Player;
All;
All;
Moira;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Is Button Held(Event Player, Button(Primary Fire)) == False;
}
actions
{
Wait(0.500, Ignore Condition);
Wait(0.180, Ignore Condition);
Call Subroutine(DestroyHealEffects);
}
}
rule("[sub] Destroy heal effects")
{
event
{
Subroutine;
DestroyHealEffects;
}
actions
{
For Player Variable(Event Player, Z, 0, Count Of(Event Player.healEntities), 1);
Destroy Effect(Event Player.healEntities[Event Player.Z]);
End;
}
}
rule("Secondary fire ring effect")
{
event
{
Ongoing - Each Player;
All;
All;
Moira;
}
conditions
{
Is Button Held(Event Player, Button(Secondary Fire)) == True;
}
actions
{
Event Player.circleEntityDamage = Empty Array;
Create Effect(All Players(All Teams), Ring, Color(Purple), Event Player, 20, Visible To Position and Radius);
Modify Player Variable(Event Player, circleEntityDamage, Append To Array, Last Created Entity);
Create Effect(All Players(All Teams), Ring, Color(Purple), Event Player, 19.950, Visible To Position and Radius);
Modify Player Variable(Event Player, circleEntityDamage, Append To Array, Last Created Entity);
Create Effect(All Players(All Teams), Ring, Color(Purple), Event Player, 20.050, Visible To Position and Radius);
Modify Player Variable(Event Player, circleEntityDamage, Append To Array, Last Created Entity);
Wait Until(Is Button Held(Event Player, Button(Secondary Fire)) == False, 1);
Destroy Effect(Event Player.circleEntityDamage[0]);
Destroy Effect(Event Player.circleEntityDamage[1]);
Destroy Effect(Event Player.circleEntityDamage[2]);
}
}
rule("Ability 2 Biotic Orb")
{
event
{
Ongoing - Each Player;
All;
All;
Moira;
}
conditions
{
Is Using Ability 2(Event Player) == True;
}
actions
{
Event Player.V = Empty Array;
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Update Every Frame(Eye Position(Event Player)), 5,
Visible To Position and Radius);
Modify Player Variable(Event Player, V, Append To Array, Last Created Entity);
Create Effect(All Players(All Teams), Sphere, Color(Purple), Update Every Frame(Eye Position(Event Player)), 4,
Visible To Position and Radius);
Modify Player Variable(Event Player, V, Append To Array, Last Created Entity);
Set Projectile Speed(Event Player, 0);
While(Is Using Ability 2(Event Player));
If(Is Button Held(Event Player, Button(Primary Fire)) == True);
Create Effect(All Players(All Teams), Sphere, Color(Yellow), Evaluate Once(Eye Position(Event Player)), 5,
Visible To Position and Radius);
Modify Player Variable(Event Player, V, Append To Array, Last Created Entity);
Else If(Is Button Held(Event Player, Button(Secondary Fire)) == True);
Create Effect(All Players(All Teams), Sphere, Color(Purple), Evaluate Once(Eye Position(Event Player)), 4,
Visible To Position and Radius);
Modify Player Variable(Event Player, V, Append To Array, Last Created Entity);
End;
Wait(0.016, Ignore Condition);
If(Entity Exists(Event Player.V[2]));
Destroy Effect(Event Player.V[0]);
Destroy Effect(Event Player.V[1]);
Wait Until(Ability Cooldown(Event Player, Button(Ability 2)) == 0, 7);
Destroy Effect(Event Player.V[2]);
End;
End;
Destroy Effect(Event Player.V[0]);
Destroy Effect(Event Player.V[1]);
Destroy Effect(Event Player.V[2]);
}
}