Return to post
settings
{
main
{
Description: "Aim Training Labs. Practice and improve your aim with various different modes. Works for Hitscan and straight Projectile heroes. Made by Mitsiee at https://workshop.codes/aimlabs"
Description: "Aim Training Labs. Practice and improve your aim with various different modes. Works for all heroes. Made by Mitsiee at https://workshop.codes/aimlabs"
}
lobby
{
Allow Players Who Are In Queue: Yes
Max Spectators: 0
Max Team 1 Players: 1
Max Team 2 Players: 0
}
modes
{
Skirmish
{
enabled maps
{
Workshop Chamber
}
}
General
{
Limit Roles: 2 Of Each Role Per Team
}
}
heroes
{
General
{
Ana
{
Biotic Grenade: Off
No Ammunition Requirement: On
Sleep Dart: Off
Ultimate Generation - Combat Nano Boost: 0%
Ultimate Generation - Passive Nano Boost: 0%
Ultimate Generation Nano Boost: 10%
}
Ashe
{
Coach Gun: Off
Dynamite: Off
No Ammunition Requirement: On
Ultimate Generation - Combat B.O.B.: 0%
Ultimate Generation - Passive B.O.B.: 0%
Ultimate Generation B.O.B.: 10%
}
Baptiste
{
Immortality Field: Off
No Ammunition Requirement: On
Regenerative Burst: Off
Secondary Fire: Off
Ultimate Generation - Combat Amplification Matrix: 0%
Ultimate Generation - Passive Amplification Matrix: 0%
Ultimate Generation Amplification Matrix: 10%
}
Bastion
{
No Ammunition Requirement: On
Self-Repair: Off
Ultimate Generation - Combat Configuration: Tank: 0%
Ultimate Generation - Passive Configuration: Tank: 0%
Ultimate Generation Configuration: Tank: 10%
}
Echo
{
Flight: Off
Focusing Beam: Off
Glide: Off
No Ammunition Requirement: On
Quick Melee: Off
Sticky Bombs: Off
Ultimate Generation - Combat Duplicate: 0%
Ultimate Generation - Passive Duplicate: 0%
Ultimate Generation Duplicate: 10%
}
Genji
{
Deflect: Off
No Ammunition Requirement: On
Secondary Fire: Off
Swift Strike: Off
Ultimate Generation - Combat Dragonblade: 0%
Ultimate Generation - Passive Dragonblade: 0%
Ultimate Generation Dragonblade: 10%
}
McCree
{
Combat Roll: Off
Flashbang: Off
No Ammunition Requirement: On
Secondary Fire: Off
Ultimate Generation - Combat Deadeye: 0%
Ultimate Generation - Passive Deadeye: 0%
Ultimate Generation Deadeye: 10%
}
Mei
{
Cryo-Freeze: Off
Ice Wall: Off
No Ammunition Requirement: On
Primary Fire: Off
Quick Melee: Off
Ultimate Generation - Combat Blizzard: 0%
Ultimate Generation - Passive Blizzard: 0%
Ultimate Generation Blizzard: 10%
}
Mercy
{
Guardian Angel: Off
No Ammunition Requirement: On
Resurrect: Off
Ultimate Generation - Combat Valkyrie: 0%
Ultimate Generation - Passive Valkyrie: 0%
Ultimate Generation Valkyrie: 10%
Weapons Enabled: Caduceus Blaster Only
}
Orisa
{
Fortify: Off
Halt!: Off
No Ammunition Requirement: On
Protective Barrier: Off
Ultimate Generation - Combat Supercharger: 0%
Ultimate Generation - Passive Supercharger: 0%
Ultimate Generation Supercharger: 10%
}
Soldier: 76
{
Biotic Field: Off
Helix Rockets: Off
No Ammunition Requirement: On
Sprint: Off
Ultimate Generation - Combat Tactical Visor: 0%
Ultimate Generation - Passive Tactical Visor: 0%
Ultimate Generation Tactical Visor: 10%
}
Widowmaker
{
Grappling Hook: Off
No Ammunition Requirement: On
Quick Melee: Off
Ultimate Generation - Combat Infra-Sight: 0%
Ultimate Generation - Passive Infra-Sight: 0%
Ultimate Generation Infra-Sight: 10%
Venom Mine: Off
}
Wrecking Ball
{
Adaptive Shield: Off
Grappling Claw: Off
No Ammunition Requirement: On
Piledriver: Off
Roll: Off
Ultimate Generation - Combat Minefield: 0%
Ultimate Generation - Passive Minefield: 0%
Ultimate Generation Minefield: 10%
}
Zenyatta
{
No Ammunition Requirement: On
Orb of Discord: Off
Orb of Harmony: Off
Secondary Fire: Off
Ultimate Generation - Combat Transcendence: 0%
Ultimate Generation - Passive Transcendence: 0%
Ultimate Generation Transcendence: 10%
}
enabled heroes
{
Ana
Ashe
Baptiste
Bastion
Echo
Genji
McCree
Mei
Mercy
Orisa
Soldier: 76
Widowmaker
Wrecking Ball
Zenyatta
}
No Ammunition Requirement: On
Ultimate Ability: Off
}
}
}
variables
{
global:
0: BallRadius
1: BallPositions
2: GridPositions
3: Mode
4: GridLoopZ
5: GridLoopY
6: GridStart
7: GridDone
8: RandomLoop
9: GridNumberOfBalls
10: BallPositionsCheckLoop
11: IsInPregame
12: SmallBall
13: RandomBalls
14: NeedToWalk
15: CountdownActive
16: CountdownSphereEffect
18: ProjectileHeroes
17: SelectedBallRadius
19: SpawnPosition
20: NoiseEffect
21: PositiveOrNegative
22: MovingTime
23: MovingDirection
24: HealthyTargets
25: CurrentTargetHealth
26: EffectsArray
27: BotsArray
28: Loop
29: ColorSelectBubblePositions
30: BubbleColor
31: ModeSelectBubblePositions
32: ModifierSelectBubblePositions
33: SizeBubblePositions
player:
0: RaycastPrimaryFire
1: ShootLoop
2: HitPosition
3: CurrentCheckPosition
4: ShotsFired
5: ShotsLanded
6: RaycastDistance
7: IsProjectileHero
8: ProjectileSpeed
9: ProjectileDelay
10: ProjectileSize
11: FacingDirection
12: EyeLocationWhenFired
14: ReactionTimeArray
15: CurrentReactionTime
16: AverageReactionTime
17: CalculateAverageReactionTimeLoop
18: RaycastBubbleSelect
19: CurrentBubbleHealth
}
subroutines
{
0: SetRandomPosition
1: SetBallSize
2: EnableFire
3: SetRandom360Position
4: ResetTargetHealth
5: ChaseReactionTime
7: TeleportBots
}
disabled rule("------------------------------------------- Initialise")
{
event
{
Ongoing - Global;
}
}
rule("Initialise")
{
event
{
Ongoing - Global;
}
actions
{
Disable Inspector Recording;
disabled Disable Inspector Recording;
Disable Built-In Game Mode Music;
Global.BallRadius = 0.500;
Global.SelectedBallRadius = Global.BallRadius;
Global.Mode = 0;
Global.GridStart = Vector(-8, 1.500, 0);
Global.GridNumberOfBalls = 4;
Global.IsInPregame = True;
Global.NeedToWalk = False;
Global.SpawnPosition = Vector(0, 1.500, 0);
Global.PositiveOrNegative = Empty Array;
Global.PositiveOrNegative = Append To Array(Global.PositiveOrNegative, -1);
Global.PositiveOrNegative = Append To Array(Global.PositiveOrNegative, 1);
Global.PositiveOrNegative = Array(1, -1);
Global.CurrentTargetHealth = 0;
}
}
rule("Teleport player")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Has Spawned(Event Player) == True;
}
actions
{
Teleport(Event Player, Global.SpawnPosition);
}
}
rule("Back to menu")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Crouch) == True;
Is Button Held(Event Player, Interact) == True;
Is Button Held(Event Player, Button(Crouch)) == True;
Is Button Held(Event Player, Button(Interact)) == True;
}
actions
{
Global.IsInPregame = True;
Clear Status(Event Player, Rooted);
}
}
rule("Swap hero")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Crouch) == True;
Is Button Held(Event Player, Reload) == True;
Is Button Held(Event Player, Jump) == True;
Is Button Held(Event Player, Button(Crouch)) == True;
Is Button Held(Event Player, Button(Reload)) == True;
Is Button Held(Event Player, Button(Jump)) == True;
}
actions
{
Set Player Allowed Heroes(Event Player, Remove From Array(All Heroes, Hero Of(Event Player)));
Wait(0.250, Ignore Condition);
Reset Player Hero Availability(Event Player);
}
}
rule("Create Projectile Heroes array")
disabled rule("------------------------------------------- HUD")
{
event
{
Ongoing - Global;
}
actions
{
Global.ProjectileHeroes = Empty Array;
Global.ProjectileHeroes = Append To Array(Global.ProjectileHeroes, Hero(Echo));
Global.ProjectileHeroes = Append To Array(Global.ProjectileHeroes, Hero(Mei));
Global.ProjectileHeroes = Append To Array(Global.ProjectileHeroes, Hero(Ana));
Global.ProjectileHeroes = Append To Array(Global.ProjectileHeroes, Hero(Genji));
Global.ProjectileHeroes = Append To Array(Global.ProjectileHeroes, Hero(Orisa));
Global.ProjectileHeroes = Append To Array(Global.ProjectileHeroes, Hero(Mercy));
}
}
rule("Is Projectile Hero?")
rule("HUD - Accuracy")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
actions
{
Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) == True;
Create HUD Text(Event Player, Null, Null, Custom String("Score: {1}", Event Player.ShotsFired, Event Player.ShotsLanded,
100 / Event Player.ShotsFired * Event Player.ShotsLanded), Top, 1, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Filtered Array((Global.IsInPregame && Count Of(Event Player.ReactionTimeArray) > 1) == True, True), Null, Null,
Custom String("Avg. Reaction time during last run: {0}", Event Player.AverageReactionTime), Top, 2, Color(White), Color(White),
Color(White), Visible To and String, Default Visibility);
}
}
rule("HUD - Controls")
{
event
{
Ongoing - Global;
}
actions
{
Event Player.IsProjectileHero = True;
"Set default values"
Event Player.ProjectileDelay = 0;
"Set values per hero"
If(Hero Of(Event Player) == Hero(Echo));
Event Player.ProjectileSpeed = 75;
Event Player.ProjectileSize = 0.500;
Else If(Hero Of(Event Player) == Hero(Mei));
Event Player.ProjectileSpeed = 115;
Event Player.ProjectileDelay = 0.400;
Event Player.ProjectileSize = 0.150;
Else If(Hero Of(Event Player) == Hero(Ana));
Event Player.ProjectileSpeed = 125;
Event Player.ProjectileSize = 0;
Else If(Hero Of(Event Player) == Hero(Genji));
Event Player.ProjectileSpeed = 60;
Event Player.ProjectileSize = 0.100;
Else If(Hero Of(Event Player) == Hero(Orisa));
Event Player.ProjectileSpeed = 90;
Event Player.ProjectileSize = 0.100;
Else If(Hero Of(Event Player) == Hero(Mercy));
Event Player.ProjectileSpeed = 50;
Event Player.ProjectileSize = 0.250;
Else If(Hero Of(Event Player) == Hero(Zenyatta));
Event Player.ProjectileSpeed = 90;
Event Player.ProjectileSize = 0.150;
Else If(Hero Of(Event Player) == Hero(Pharah));
Event Player.ProjectileSpeed = 35;
Event Player.ProjectileSize = 0.200;
Else If(Hero Of(Event Player) == Hero(Reinhardt));
Event Player.ProjectileSpeed = 25;
Event Player.ProjectileDelay = 0.480;
Event Player.ProjectileSize = 0.850;
Else If(Hero Of(Event Player) == Hero(D.Va));
Event Player.ProjectileSpeed = 50;
Event Player.ProjectileSize = 0.250;
Else If(Hero Of(Event Player) == Hero(Junkrat));
Event Player.ProjectileSpeed = 25;
Event Player.ProjectileSize = 0.200;
Else If(Hero Of(Event Player) == Hero(Torbjörn));
Event Player.ProjectileSpeed = 70;
Event Player.ProjectileSize = 0.100;
Else If(Hero Of(Event Player) == Hero(Hanzo));
Event Player.ProjectileSpeed = 110;
Event Player.ProjectileSize = 0.100;
Else If(Hero Of(Event Player) == Hero(Zarya));
Event Player.ProjectileSpeed = 25;
Event Player.ProjectileSize = 0.200;
Else If(Hero Of(Event Player) == Hero(Lúcio));
Event Player.ProjectileSpeed = 50;
Event Player.ProjectileSize = 0.150;
End;
Create HUD Text(All Players(All Teams), Null, Custom String("{0} + {1} to go back to the menu", Input Binding String(Button(
Crouch)), Input Binding String(Button(Interact))), Null, Right, -5, Color(White), Color(Blue), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Custom String("{0} + {1} + {2} to swap heroes", Input Binding String(Button(Crouch)),
Input Binding String(Button(Jump)), Input Binding String(Button(Reload))), Null, Right, -4, Color(White), Color(Sky Blue),
Color(White), Visible To and String, Default Visibility);
}
}
rule("Is not projectile hero?")
rule("HUD - Workshop.codes link")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
actions
{
Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) != True;
Create HUD Text(All Players(All Teams), Null, Null, Custom String("Workshop.codes/aimlabs"), Top, 0, Color(White), Color(Orange),
Color(Orange), Visible To and String, Default Visibility);
}
}
actions
disabled rule("----------------------------------------- Pregame")
{
event
{
Event Player.IsProjectileHero = False;
Event Player.ProjectileSize = 0;
Event Player.ProjectileDelay = 0;
Event Player.ProjectileSpeed = 0;
Ongoing - Global;
}
}
rule("Special case, Ana in scope")
rule("Pregame HUD")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
actions
{
Hero Of(Event Player) == Hero(Ana);
Is Firing Secondary(Event Player) == True;
"Press interact to select button"
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Null, Custom String(
"Press {0} on a bubble to select", Input Binding String(Button(Interact))), Top, 5, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
"Blurb about walking around"
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(
"You can walk around freely, but you will be rooted when you start"), Null, Top, 6, Color(White), Color(Sky Blue), Color(
Sky Blue), Visible To and String, Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
Create HUD Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Null, Custom String(" "), Custom String(" ",
Input Binding String(Button(Interact))), Top, 4, Color(White), Color(White), Color(White), Visible To and String,
Default Visibility);
}
}
rule("Pregame In-world")
{
event
{
Ongoing - Global;
}
actions
{
"Projectile speed per second"
Event Player.ProjectileSpeed = 0;
"--- Select mode"
Create Icon(Filtered Array(All Players(All Teams), Global.IsInPregame), Vector(-20, 12, 0), Asterisk,
Visible To Position and Color, Color(White), True);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Select mode"), Vector(-20, 12, 0),
2, Do Not Clip, Visible To Position and String, Color(White), Default Visibility);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Modes"), Vector(-20, 10, 5), 1.500,
Do Not Clip, Visible To Position and String, Color(Gray), Default Visibility);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Modifiers"), Vector(-20, 10, -5),
1.500, Do Not Clip, Visible To Position and String, Color(Gray), Default Visibility);
"--- Customise target"
Create Icon(Filtered Array(All Players(All Teams), Global.IsInPregame), Vector(0, 12, -20), Circle, Visible To Position and Color,
Global.BubbleColor, True);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Customise target"), Vector(0, 12,
-20), 2, Do Not Clip, Visible To Position and String, Color(White), Default Visibility);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.BubbleColor, Vector(0, 5, -15),
Global.BallRadius, Visible To Position Radius and Color);
"-- Destroy to start"
Create In-World Text(Global.IsInPregame, Custom String("Destroy me to start"), Global.BallPositions[0], 1, Do Not Clip,
Visible To Position and String, Color(Turquoise), Default Visibility);
"Aim"
Create In-World Text(Filtered Array(Global.IsInPregame, True), Custom String("Aim Training Labs"), Vector(-16, 16, 0), 5,
Do Not Clip, Visible To Position and String, Custom Color(14, 199, 255, 255), Default Visibility);
Create In-World Text(Filtered Array(Global.IsInPregame, True), Custom String("Workshop.codes/aimlabs"), Vector(-16, 15, 0), 2,
Do Not Clip, Visible To Position and String, Color(White), Default Visibility);
Create In-World Text(Filtered Array(Global.IsInPregame, True), Custom String("Made by Mitsiee"), Vector(-16, 14, 0), 1,
Do Not Clip, Visible To Position and String, Custom Color(180, 180, 180, 255), Default Visibility);
}
}
rule("Special case, Ana not in scope")
rule("Is in pregame")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Hero Of(Event Player) == Hero(Ana);
Is Firing Secondary(Event Player) != True;
Global.IsInPregame == True;
Has Spawned(Event Player) == True;
Is Assembling Heroes != True;
}
actions
{
"Projectile speed per second"
Event Player.ProjectileSpeed = 125;
Global.BallPositions = Empty Array;
Global.BallPositions = Append To Array(Global.BallPositions, Vector(-12, 1.500, 0));
Call Subroutine(TeleportBots);
Set Match Time(3599);
}
}
disabled rule("------------------------------------------- HUD")
rule("Is not in pregame")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame != True;
}
}
rule("HUD - Accuracy")
rule("Interact to ray cast bubble select")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Button(Interact)) == True;
}
actions
{
Create HUD Text(Event Player, Null, Null, Custom String("Shots: {0} Hit: {1} Accuracy: {2}%", Event Player.ShotsFired,
Event Player.ShotsLanded, 100 / Event Player.ShotsFired * Event Player.ShotsLanded), Top, 1, White, White, White,
Visible To and String, Default Visibility);
Create HUD Text(Filtered Array((Global.IsInPregame && Count Of(Event Player.ReactionTimeArray) > 1) == True, True), Null, Null,
Custom String("Avg. Reaction time during last run: {0}", Event Player.AverageReactionTime), Top, 2, White, White, White,
Visible To and String, Default Visibility);
Event Player.RaycastBubbleSelect = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player)
+ Facing Direction Of(Event Player) * 100, Null, All Players(All Teams), False);
Wait(0.016, Ignore Condition);
Event Player.RaycastBubbleSelect = Vector(0, 0, 0);
}
}
rule("HUD - Controls")
rule("Start selected mode")
{
event
{
Ongoing - Global;
Player Dealt Damage;
All;
All;
}
conditions
{
Global.IsInPregame == True;
}
actions
{
Create HUD Text(All Players(All Teams), Null, Custom String("Press [Crouch] + [Interact] to go back to the menu", Server Load,
Server Load Peak, Server Load Average), Null, Right, -5, White, Blue, White, Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Custom String("Press [Crouch] + [Reload] + [Jump] to swap heroes", Server Load,
Server Load Peak, Server Load Average), Null, Right, -4, White, Sky Blue, White, Visible To and String, Default Visibility);
Global.IsInPregame = False;
}
}
rule("HUD - Workshop.codes link")
disabled rule("---------------------------------------- Reaction time")
{
event
{
Ongoing - Global;
}
}
rule("Subroutine - Start chase on reaction time array")
{
event
{
Subroutine;
ChaseReactionTime;
}
actions
{
Create HUD Text(All Players(All Teams), Null, Null, Custom String("Workshop.codes/aimlabs"), Top, 0, White, Orange, Orange,
Visible To and String, Default Visibility);
Event Player.ReactionTimeArray = Empty Array;
Chase Player Variable At Rate(Event Player, CurrentReactionTime, 1000, 1, Destination and Rate);
}
}
disabled rule("----------------------------------------- Pregame")
rule("Add to reaction time array")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
((Hero Of(Event Player) == Hero(Mei) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) != Hero(Mei)
&& Is Firing Primary(Event Player))) == True;
Global.IsInPregame != True;
}
actions
{
Event Player.ReactionTimeArray = Append To Array(Event Player.ReactionTimeArray, Event Player.CurrentReactionTime);
Event Player.CurrentReactionTime = 0;
}
}
rule("Is in pregame")
rule("Calculate average reaction time")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame == True;
Has Spawned(Event Player) == True;
Is Assembling Heroes != True;
Count Of(Event Player.ReactionTimeArray) > 1;
}
actions
{
Call Subroutine(EnableFire);
Global.BallPositions = Empty Array;
Global.BallPositions = Append To Array(Global.BallPositions, Vector(-12, 1.500, 0));
Set Match Time(3599);
For Player Variable(Event Player, CalculateAverageReactionTimeLoop, 0, Count Of(Event Player.ReactionTimeArray), 1);
Event Player.AverageReactionTime += Event Player.ReactionTimeArray[Event Player.CalculateAverageReactionTimeLoop];
End;
Event Player.AverageReactionTime /= Count Of(Event Player.ReactionTimeArray);
Event Player.CurrentReactionTime = 1000;
}
}
rule("Is not in pregame")
disabled rule("---------------------------------------- Mode is about to start")
{
event
{
Ongoing - Global;
}
}
rule("Countdown")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame != True;
Is Dummy Bot(Event Player) != True;
}
actions
{
Create Effect(All Players(All Teams), Sphere, Color(Aqua), Event Player, 2, Visible To Position and Radius);
Global.CountdownSphereEffect = Last Created Entity;
Wait(0.050, Ignore Condition);
Global.CountdownActive = True;
Event Player.ShotsFired = 0;
Event Player.ShotsLanded = 0;
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, False);
Communicate(Event Player, Countdown);
Small Message(All Players(All Teams), Custom String("3..."));
Wait(1, Ignore Condition);
Small Message(All Players(All Teams), Custom String("2..."));
Wait(1, Ignore Condition);
Small Message(All Players(All Teams), Custom String("1..."));
Wait(1, Ignore Condition);
Small Message(All Players(All Teams), Custom String("GO!"));
Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Event Player, 100);
Call Subroutine(EnableFire);
Global.CountdownActive = False;
Destroy Effect(Global.CountdownSphereEffect);
Play Effect(All Players(All Teams), Ring Explosion, Color(Aqua), Event Player, 10);
Set Primary Fire Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, True);
}
}
rule("Is in pregame game selection HUD")
disabled rule("--------------------------------------Timer")
{
event
{
Ongoing - Global;
}
actions
{
"Title"
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
Default Visibility);
Wait(0.020, Ignore Condition);
Create HUD Text(Global.IsInPregame, Null, Null, Custom String("Select a gamemode", Global.GridNumberOfBalls), Left, 0, White,
White, Turquoise, Visible To and String, Default Visibility);
Wait(0.020, Ignore Condition);
"Bunch of empty hud texts to push other text down"
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
Default Visibility);
Wait(0.020, Ignore Condition);
"Standard mode"
Create HUD Text(Global.IsInPregame, Custom String("Standard"), Custom String("Select with [Ability 1] + [Primary Fire]"),
Custom String("1 Target at a random location"), Left, 1, White, White, White, Visible To and String, Default Visibility);
Wait(0.020, Ignore Condition);
"Grid mode, available"
Create HUD Text(Filtered Array(Global.IsInPregame && !Global.HealthyTargets, 0 == 0), Custom String("Grid"), Custom String(
"Select with [Ability 1] + [Secondary Fire]"), Custom String("{0} Targets in a tight grid", Global.GridNumberOfBalls), Left, 2,
White, White, White, Visible To and String, Default Visibility);
"Grid mode, unavailable"
Create HUD Text(Filtered Array(Global.IsInPregame && Global.HealthyTargets, 0 == 0), Custom String("Grid"), Custom String(
"Disabled because of modifier"), Custom String("{0} Targets in a tight grid", Global.GridNumberOfBalls), Left, 2, Red, White,
White, Visible To and String, Default Visibility);
Wait(0.020, Ignore Condition);
"Awareness mode"
Create HUD Text(Global.IsInPregame, Custom String("Awareness"), Custom String("Select with [Ability 1] + [Interact]"),
Custom String("Targets appear all around the lab but make a constant noise to help you find them", Global.GridNumberOfBalls),
Left, 3, White, White, White, Visible To and String, Default Visibility);
Wait(0.020, Ignore Condition);
"Strafing mode"
Create HUD Text(Global.IsInPregame, Custom String("Strafing targets"), Custom String("Select with [Ability 1] + [Crouch]"),
Custom String("Targets strafe in a random direction"), Left, 4, White, White, White, Visible To and String,
Default Visibility);
Wait(0.020, Ignore Condition);
}
}
rule("Is in pregame in-world text")
rule("Start Timer")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame != True;
Global.CountdownActive != True;
Is Dummy Bot(Event Player) != True;
}
actions
{
Create In-World Text(Global.IsInPregame, Custom String("Select a mode on the left side of the screen to start"),
Global.BallPositions[0], 1.250, Do Not Clip, Visible To Position and String, Turquoise, Default Visibility);
"Root player"
Set Status(Event Player, Null, Rooted, 9999);
Wait(0.050, Abort When False);
"Start timer according to workshop setting"
Set Match Time(Workshop Setting Integer(Custom String("Timer"), Custom String("Time per round"), 60, 10, 180, 0) + 0.500);
"Reset reaction time"
Event Player.CurrentReactionTime = 0;
"Start chasing reaction time"
Call Subroutine(ChaseReactionTime);
"Reset target health, in case of healthy targets"
Call Subroutine(ResetTargetHealth);
}
}
rule("Start Grid Mode")
rule("End of timer")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 1) == True;
Is Button Held(Event Player, Secondary Fire) == True;
Global.IsInPregame == True;
Global.HealthyTargets != True;
Match Time < 0.500;
Is Dummy Bot(Event Player) != True;
}
actions
{
Global.IsInPregame = False;
Global.Mode = 0;
Set Match Time(3599);
Global.CountdownActive = True;
Play Effect(All Players(All Teams), Ring Explosion, Color(Red), Event Player, 10);
Play Effect(All Players(All Teams), Ring Explosion Sound, Color(White), Event Player, 100);
Create Effect(All Players(All Teams), Sphere, Color(Red), Event Player, 2, Visible To Position and Radius);
Global.CountdownSphereEffect = Last Created Entity;
Wait(3, Ignore Condition);
Clear Status(Event Player, Rooted);
Destroy Effect(Global.CountdownSphereEffect);
Global.IsInPregame = True;
Global.CountdownActive = False;
Event Player.CurrentReactionTime = 1000;
Call Subroutine(ResetTargetHealth);
}
}
rule("Start Standard Mode")
disabled rule("------------------------------------------- Bubbles")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
}
conditions
rule("Create bubble effects & dummy bots")
{
event
{
Is Button Held(Event Player, Ability 1) == True;
Is Button Held(Event Player, Primary Fire) == True;
Global.IsInPregame == True;
Ongoing - Global;
}
actions
{
Global.IsInPregame = False;
Global.Mode = 1;
Global.EffectsArray = Empty Array;
Global.BotsArray = Empty Array;
For Global Variable(Loop, 0, 5, 1);
Create Effect(Filtered Array(All Players(All Teams), Count Of(Global.BallPositions) > Evaluate Once(Global.Loop)), Sphere,
Global.BubbleColor, Global.BallPositions[Evaluate Once(Global.Loop)], Global.BallRadius, Visible To Position Radius and Color);
Global.EffectsArray = Append To Array(Global.EffectsArray, Last Created Entity);
Create Dummy Bot(Hero(Wrecking Ball), Team 2, -1, Vector(1, 45, 1), Vector(0, 0, 0));
Global.BotsArray = Append To Array(Global.BotsArray, Last Created Entity);
End;
}
}
rule("Start Awareness Mode")
rule("Set dummy bot status")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 1) == True;
Is Button Held(Event Player, Interact) == True;
Global.IsInPregame == True;
Is Dummy Bot(Event Player) == True;
Has Spawned(Event Player) == True;
}
actions
{
Global.IsInPregame = False;
Global.Mode = 2;
Wait(1, Ignore Condition);
Teleport(Event Player, Vector(0, 45, 0));
Set Status(Event Player, Null, Rooted, 9999);
Press Button(Event Player, Button(Ability 1));
Set Gravity(Event Player, 0);
Start Scaling Player(Event Player, Global.BallRadius * 1.200, True);
Set Damage Received(Event Player, 0.100);
Set Knockback Received(Event Player, 0);
Set Invisible(Event Player, All);
Disable Movement Collision With Players(Event Player);
Disable Movement Collision With Environment(Event Player, False);
}
}
rule("Start Strafing Targets Mode")
rule("Create pregame bubble")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Is Button Held(Event Player, Ability 1) == True;
Is Button Held(Event Player, Crouch) == True;
Global.IsInPregame == True;
Count Of(Global.BallPositions) == 0;
}
actions
{
Global.IsInPregame = False;
Global.Mode = 3;
Global.BallPositions = Empty Array;
Global.BallPositions = Append To Array(Global.BallPositions, Vector(-12, 1.500, 0));
Call Subroutine(TeleportBots);
}
}
rule("Subroutine - Enable primary or secondary")
rule("Bubble takes damage")
{
event
{
Subroutine;
EnableFire;
Player Took Damage;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
If(Hero Of(Event Player) == Hero(Mei));
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, True);
Play Effect(All Players(All Teams), Good Explosion, Global.BubbleColor, Global.BallPositions[Index Of Array Value(Global.BotsArray,
Event Player)], 0.500);
Play Effect(All Players(All Teams), Bad Explosion, Global.BubbleColor, Global.BallPositions[Index Of Array Value(Global.BotsArray,
Event Player)], 0.500);
"Increment score"
Attacker.ShotsLanded += 1;
"Heal bot, just in case"
Heal(Event Player, Null, 1000);
If(Global.HealthyTargets);
Event Player.CurrentBubbleHealth -= 1;
If(Event Player.CurrentBubbleHealth == 0);
Call Subroutine(SetBallSize);
Event Player.CurrentBubbleHealth = 4;
"Remove effect by displacing it and it's bot"
Global.BallPositions = Remove From Array(Global.BallPositions, Global.BallPositions[Index Of Array Value(Global.BotsArray,
Event Player)]);
Teleport(Event Player, Vector(0, 50, 0));
End;
Else;
Set Primary Fire Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, False);
End;
If(Hero Of(Event Player) == Hero(Widowmaker) || Hero Of(Event Player) == Hero(Ashe) || Hero Of(Event Player) == Hero(Ana));
Set Secondary Fire Enabled(Event Player, True);
Call Subroutine(SetBallSize);
"Remove effect by displacing it and it's bot"
Global.BallPositions = Remove From Array(Global.BallPositions, Global.BallPositions[Index Of Array Value(Global.BotsArray,
Event Player)]);
Teleport(Event Player, Vector(0, 50, 0));
End;
}
}
rule("Subroutine - Set Ball Size")
rule("Subroutine [TeleportBots] - Teleport dummy bots to bubble locations")
{
event
{
Subroutine;
SetBallSize;
TeleportBots;
}
actions
{
If(Global.RandomBalls);
If(Global.SmallBall);
Global.BallRadius = Random Real(0.150, 0.300);
Else;
Global.BallRadius = Random Real(0.200, 0.550);
End;
Else;
If(Global.SmallBall);
Global.BallRadius = 0.250;
For Global Variable(Loop, 0, Count Of(Global.BotsArray), 1);
If(Global.BallPositions[Global.Loop] == True);
If(Global.RandomBalls);
Wait(0.100, Ignore Condition);
End;
Teleport(Global.BotsArray[Global.Loop], Global.BallPositions[Global.Loop] + Vector(0, Global.BallRadius * 1.340 * -1, 0));
Else;
Global.BallRadius = 0.500;
Teleport(Global.BotsArray[Global.Loop], Vector(0, 50, 0));
End;
End;
}
}
disabled rule("---------------------------------------- Reaction time")
disabled rule("----------------------------------------- Grid mode = 0")
{
event
{
Ongoing - Global;
}
}
rule("Subroutine - Start chase on reaction time array")
rule("Create grid mode select bubble")
{
event
{
Subroutine;
ChaseReactionTime;
Ongoing - Global;
}
actions
{
Event Player.ReactionTimeArray = Empty Array;
Chase Player Variable At Rate(Event Player, CurrentReactionTime, 1000, 1, Destination and Rate);
"Create array for positions of color select effects"
Global.ModeSelectBubblePositions[0] = Vector(-20, 10, 5);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Grid"),
Global.ModeSelectBubblePositions[0] + Vector(0, -1.250, -1.500), 1.250, Do Not Clip, Visible To Position String and Color,
Global.Mode == 0 ? Color(Green) : Color(White), Default Visibility);
"Create effects"
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.Mode == 0 ? Color(Green) : Color(White),
Global.ModeSelectBubblePositions[0], 0.750, Visible To and Color);
}
}
rule("Add to reaction time array")
rule("Select grid mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
((Hero Of(Event Player) == Hero(Mei) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) != Hero(Mei)
&& Is Firing Primary(Event Player))) == True;
Global.IsInPregame != True;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModeSelectBubblePositions[0]) < 0.750;
}
actions
{
Event Player.ReactionTimeArray = Append To Array(Event Player.ReactionTimeArray, Event Player.CurrentReactionTime);
Event Player.CurrentReactionTime = 0;
Global.Mode = 0;
Play Effect(All Players(All Teams), Good Explosion, Color(Green), Global.ModeSelectBubblePositions[0], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Green), Global.ModeSelectBubblePositions[0], 50);
}
}
rule("Calculate average reaction time")
rule("Create grid positions array")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Global.IsInPregame == True;
Count Of(Event Player.ReactionTimeArray) > 1;
Global.Mode == 0;
Global.IsInPregame != True;
}
actions
{
For Player Variable(Event Player, CalculateAverageReactionTimeLoop, 0, Count Of(Event Player.ReactionTimeArray), 1);
Event Player.AverageReactionTime += Event Player.ReactionTimeArray[Event Player.CalculateAverageReactionTimeLoop];
Global.GridDone = False;
Global.GridPositions = Empty Array;
For Global Variable(GridLoopY, 0, 5, 1);
For Global Variable(GridLoopZ, -3, 3, 1);
Global.GridPositions = Append To Array(Global.GridPositions, Global.GridStart + Vector(0, Global.GridLoopY * 1.100,
Global.GridLoopZ * 1.100));
End;
End;
Event Player.AverageReactionTime /= Count Of(Event Player.ReactionTimeArray);
Event Player.CurrentReactionTime = 1000;
Global.GridDone = True;
}
}
disabled rule("---------------------------------------- Modifiers")
rule("Create x number of balls")
{
event
{
Ongoing - Global;
}
conditions
{
Global.GridDone == True;
Global.IsInPregame != True;
Global.Mode == 0;
}
actions
{
Global.BallPositions = Empty Array;
For Global Variable(RandomLoop, 0, Global.GridNumberOfBalls, 1);
Global.BallPositions = Append To Array(Global.BallPositions, Random Value In Array(Remove From Array(Global.GridPositions,
Global.BallPositions)));
End;
Wait(0.100, Ignore Condition);
Call Subroutine(TeleportBots);
}
}
rule("Modifiers HUD")
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Global;
}
conditions
{
Count Of(Global.BallPositions) < Global.GridNumberOfBalls;
Global.GridDone == True;
Global.IsInPregame != True;
Global.Mode == 0;
}
actions
{
"Title"
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 10, White, White, White, Visible To and String,
Default Visibility);
Wait(0.020, Ignore Condition);
Create HUD Text(Global.IsInPregame, Null, Null, Custom String("Select optional modifiers", Global.GridNumberOfBalls), Left, 10,
White, White, Orange, Visible To and String, Default Visibility);
Wait(0.020, Ignore Condition);
"Bunch of empty hud texts to push other text down"
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 10, White, White, White, Visible To and String,
Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 10, White, White, White, Visible To and String,
Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 10, White, White, White, Visible To and String,
Default Visibility);
Wait(0.020, Ignore Condition);
"Small ball, inactive"
Create HUD Text(Filtered Array(Global.IsInPregame && !Global.SmallBall, True), Custom String("Small targets"), Custom String(
"Select with [Ability 2] + [Primary Fire]"), Custom String("The targets are much smaller"), Left, 11, White, White, White,
Visible To and String, Default Visibility);
"Small ball, active"
Create HUD Text(Filtered Array(Global.IsInPregame && Global.SmallBall, True), Custom String("Small targets"), Custom String(
"Select with [Ability 2] + [Primary Fire]"), Custom String("Targets are much smaller"), Left, 11, Green, White, White,
Visible To and String, Default Visibility);
"Random balls, inactive"
Create HUD Text(Filtered Array(Global.IsInPregame && !Global.RandomBalls, True), Custom String("Random target size"),
Custom String("Select with [Ability 2] + [Secondary Fire]"), Custom String(
"Every time you hit a target the target size changes"), Left, 12, White, White, White, Visible To and String,
Default Visibility);
"Random balls, active"
Create HUD Text(Filtered Array(Global.IsInPregame && Global.RandomBalls, True), Custom String("Random target size"), Custom String(
"Select with [Ability 2] + [Secondary Fire]"), Custom String("Every time you hit a target size changes"), Left, 12, Green,
White, White, Visible To and String, Default Visibility);
"Further away, inactive"
Create HUD Text(Filtered Array(Global.IsInPregame && X Component Of(Global.SpawnPosition) == 0, True), Custom String("Sniper"),
Custom String("Select with [Ability 2] + [Crouch]"), Custom String("You stand further away"), Left, 13, White, White, White,
Visible To and String, Default Visibility);
"Further away, active"
Create HUD Text(Filtered Array(Global.IsInPregame && X Component Of(Global.SpawnPosition) != 0, True), Custom String("Sniper"),
Custom String("Select with [Ability 2] + [Crouch]"), Custom String("You stand further away"), Left, 13, Green, White, White,
Visible To and String, Default Visibility);
"Healthy targets, inactive"
Create HUD Text(Filtered Array(Global.IsInPregame && !Global.HealthyTargets, True), Custom String("Healthy targets"),
Custom String("Select with [Ability 2] + [Interact]"), Custom String("Targets take 5 hits to destroy"), Left, 14, White, White,
White, Visible To and String, Default Visibility);
"Healthy targets, active"
Create HUD Text(Filtered Array(Global.IsInPregame && Global.HealthyTargets, True), Custom String("Healthy targets"), Custom String(
"Select with [Ability 2] + [Interact]"), Custom String("Targets take 5 hits to destroy"), Left, 14, Green, White, White,
Visible To and String, Default Visibility);
Global.BallPositions = Append To Array(Global.BallPositions, Random Value In Array(Remove From Array(Global.GridPositions,
Global.BallPositions)));
Call Subroutine(TeleportBots);
Loop If Condition Is True;
}
}
rule("Select small size modifier")
disabled rule("----------------------------------------- Standard mode = 1")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
}
conditions
rule("Create standard mode select bubble")
{
event
{
Is Button Held(Event Player, Ability 2) == True;
Is Button Held(Event Player, Primary Fire) == True;
Global.IsInPregame == True;
Ongoing - Global;
}
actions
{
If(Global.SmallBall == True);
Global.BallRadius = 0.500;
Global.SmallBall = False;
Else;
Global.BallRadius = 0.250;
Global.SmallBall = True;
End;
"Create array for positions of color select effects"
Global.ModeSelectBubblePositions[1] = Vector(-20, 8, 5);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Standard"),
Global.ModeSelectBubblePositions[1] + Vector(0, -1.250, -2.200), 1.250, Do Not Clip, Visible To Position String and Color,
Global.Mode == 1 ? Color(Green) : Color(White), Default Visibility);
"Create effects"
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.Mode == 1 ? Color(Green) : Color(White),
Global.ModeSelectBubblePositions[1], 0.750, Visible To and Color);
}
}
rule("Random target size")
rule("Select standard mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 2) == True;
Is Button Held(Event Player, Secondary Fire) == True;
Global.IsInPregame == True;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModeSelectBubblePositions[1]) < 0.750;
}
actions
{
If(Global.RandomBalls == True);
Global.RandomBalls = False;
Else;
Global.RandomBalls = True;
End;
Call Subroutine(SetBallSize);
Global.Mode = 1;
Play Effect(All Players(All Teams), Good Explosion, Color(Green), Global.ModeSelectBubblePositions[1], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Green), Global.ModeSelectBubblePositions[1], 50);
}
}
rule("Cannot walk")
rule("Subroutine - Set random position")
{
event
{
Ongoing - Each Player;
All;
All;
Subroutine;
SetRandomPosition;
}
actions
{
Global.BallPositions = Append To Array(Global.BallPositions, Global.GridStart + Vector(Random Real(-6, 2), Random Real(0, 4),
Random Real(-6, 6)));
Call Subroutine(TeleportBots);
}
}
rule("Create ball at random position")
{
event
{
Ongoing - Global;
}
conditions
{
Global.NeedToWalk == False;
Global.IsInPregame == True;
Global.Mode == 1;
Global.IsInPregame != True;
}
actions
{
Set Status(Event Player, Null, Rooted, 9999);
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
}
}
rule("Can walk")
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Global.NeedToWalk == True;
Global.IsInPregame == True;
Global.Mode == 1;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
}
actions
{
Clear Status(Event Player, Rooted);
Call Subroutine(SetRandomPosition);
}
}
rule("Location modifier")
disabled rule("----------------------------------------- 360 mode = 2")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
}
conditions
rule("Create 360 mode select bubble")
{
event
{
Is Button Held(Event Player, Ability 2) == True;
Is Button Held(Event Player, Crouch) == True;
Global.IsInPregame == True;
Ongoing - Global;
}
actions
{
If(Global.SpawnPosition == Vector(0, 1.500, 0));
Global.SpawnPosition = Vector(12, 1.500, 0);
Else;
Global.SpawnPosition = Vector(0, 1.500, 0);
End;
Teleport(Event Player, Global.SpawnPosition);
"Create array for positions of color select effects"
Global.ModeSelectBubblePositions[2] = Vector(-20, 6, 5);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("360"),
Global.ModeSelectBubblePositions[2] + Vector(0, -1.250, -1.500), 1.250, Do Not Clip, Visible To Position String and Color,
Global.Mode == 2 ? Color(Green) : Color(White), Default Visibility);
"Create effects"
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.Mode == 2 ? Color(Green) : Color(White),
Global.ModeSelectBubblePositions[2], 0.750, Visible To and Color);
}
}
rule("Healthy targets")
rule("Select 360 mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 2) == True;
Is Button Held(Event Player, Interact) == True;
Global.IsInPregame == True;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModeSelectBubblePositions[2]) < 0.750;
}
actions
{
Global.HealthyTargets = !Global.HealthyTargets;
Call Subroutine(ResetTargetHealth);
Global.Mode = 2;
Play Effect(All Players(All Teams), Good Explosion, Color(Green), Global.ModeSelectBubblePositions[2], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Green), Global.ModeSelectBubblePositions[2], 50);
}
}
rule("Subroutine - Reset healthy target health")
rule("Subroutine - Set random 360 position")
{
event
{
Subroutine;
ResetTargetHealth;
SetRandom360Position;
}
actions
{
Global.CurrentTargetHealth = 4;
Global.BallPositions = Append To Array(Global.BallPositions, Vector(0, 0, 0) + Vector(Random Real(5, 15), Random Real(1, 6),
Random Real(5, 15)));
Global.BallPositions[0] = Vector(X Component Of(Global.BallPositions[0]) * Random Value In Array(Global.PositiveOrNegative),
Y Component Of(Global.BallPositions[0]), Z Component Of(Global.BallPositions[0]) * Random Value In Array(
Global.PositiveOrNegative));
Call Subroutine(TeleportBots);
Wait(0.150, Ignore Condition);
Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Global.BallPositions[0], 100);
}
}
rule("Healthy target in-world text")
rule("Create ball at random position")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
}
actions
{
Create In-World Text(Filtered Array(Global.HealthyTargets && Global.CurrentTargetHealth == 4, True), Custom String("■■■■■"),
Global.BallPositions[0] + Vector(0, Global.BallRadius, 0), 1, Clip Against Surfaces, Visible To Position and String, Green,
Default Visibility);
Create In-World Text(Filtered Array(Global.HealthyTargets && Global.CurrentTargetHealth == 3, True), Custom String("■■■■"),
Global.BallPositions[0] + Vector(0, Global.BallRadius, 0), 1, Clip Against Surfaces, Visible To Position and String, Orange,
Default Visibility);
Create In-World Text(Filtered Array(Global.HealthyTargets && Global.CurrentTargetHealth == 2, True), Custom String("■■■"),
Global.BallPositions[0] + Vector(0, Global.BallRadius, 0), 1, Clip Against Surfaces, Visible To Position and String, Orange,
Default Visibility);
Create In-World Text(Filtered Array(Global.HealthyTargets && Global.CurrentTargetHealth == 1, True), Custom String("■■"),
Global.BallPositions[0] + Vector(0, Global.BallRadius, 0), 1, Clip Against Surfaces, Visible To Position and String, Orange,
Default Visibility);
Create In-World Text(Filtered Array(Global.HealthyTargets && Global.CurrentTargetHealth == 0, True), Custom String("■"),
Global.BallPositions[0] + Vector(0, Global.BallRadius, 0), 1, Clip Against Surfaces, Visible To Position and String, Red,
Default Visibility);
Global.BallPositions = Empty Array;
Call Subroutine(SetRandom360Position);
}
}
disabled rule("---------------------------------------- Mode is about to start")
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
}
actions
{
Call Subroutine(SetRandom360Position);
}
}
rule("Countdown")
rule("Create noise")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
}
actions
{
Create Effect(All Players(All Teams), Sphere, Aqua, Event Player, 2, Visible To Position and Radius);
Global.CountdownSphereEffect = Last Created Entity;
Wait(0.050, Ignore Condition);
Global.CountdownActive = True;
Event Player.ShotsFired = 0;
Event Player.ShotsLanded = 0;
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, False);
Small Message(All Players(All Teams), Custom String("3..."));
Wait(1, Ignore Condition);
Small Message(All Players(All Teams), Custom String("2..."));
Wait(1, Ignore Condition);
Small Message(All Players(All Teams), Custom String("1..."));
Wait(1, Ignore Condition);
Small Message(All Players(All Teams), Custom String("GO!"));
Play Effect(All Players(All Teams), Ring Explosion Sound, White, Event Player, 100);
Call Subroutine(EnableFire);
Global.CountdownActive = False;
Destroy Effect(Global.CountdownSphereEffect);
Play Effect(All Players(All Teams), Ring Explosion, Aqua, Event Player, 10);
Create Effect(All Players(All Teams), Beacon Sound, Color(White), Global.BallPositions[0], 150, Visible To Position and Radius);
Global.NoiseEffect = Last Created Entity;
}
}
disabled rule("--------------------------------------Timer")
rule("Remove noise")
{
event
{
Ongoing - Global;
}
conditions
{
Global.IsInPregame == True;
}
actions
{
Destroy Effect(Global.NoiseEffect);
}
}
rule("Start Timer")
disabled rule("----------------------------------------- Strafing targets mode = 3")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
}
conditions
rule("Create strafing mode select bubble")
{
event
{
Global.IsInPregame != True;
Global.CountdownActive != True;
Ongoing - Global;
}
actions
{
Wait(0.050, Abort When False);
Set Match Time(60.500);
Event Player.CurrentReactionTime = 0;
Call Subroutine(ChaseReactionTime);
"Create array for positions of color select effects"
Global.ModeSelectBubblePositions[3] = Vector(-20, 4, 5);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Strafing"),
Global.ModeSelectBubblePositions[3] + Vector(0, -1.250, -2.150), 1.250, Do Not Clip, Visible To Position String and Color,
Global.Mode == 3 ? Color(Green) : Color(White), Default Visibility);
"Create effects"
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.Mode == 3 ? Color(Green) : Color(White),
Global.ModeSelectBubblePositions[3], 0.750, Visible To and Color);
}
}
rule("End of timer")
rule("Select strafing mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Match Time < 0.500;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModeSelectBubblePositions[3]) < 0.750;
}
actions
{
Set Match Time(3599);
Global.CountdownActive = True;
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, False);
Play Effect(All Players(All Teams), Ring Explosion, Red, Event Player, 10);
Play Effect(All Players(All Teams), Ring Explosion Sound, White, Event Player, 100);
Create Effect(All Players(All Teams), Sphere, Red, Event Player, 2, Visible To Position and Radius);
Global.CountdownSphereEffect = Last Created Entity;
Wait(3, Ignore Condition);
Destroy Effect(Global.CountdownSphereEffect);
Global.IsInPregame = True;
Global.CountdownActive = False;
Event Player.CurrentReactionTime = 1000;
Global.Mode = 3;
Play Effect(All Players(All Teams), Good Explosion, Color(Green), Global.ModeSelectBubblePositions[3], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Green), Global.ModeSelectBubblePositions[3], 50);
}
}
disabled rule("------------------------------------------- Bubbles")
rule("Create ball at random position")
{
event
{
Ongoing - Global;
}
}
rule("Create bubble effects")
{
event
conditions
{
Ongoing - Global;
Global.Mode == 3;
Global.IsInPregame != True;
}
actions
{
Create Effect(Filtered Array(All Players(All Teams), Count Of(Global.BallPositions) > 0), Sphere, Aqua, Global.BallPositions[0],
Global.BallRadius, Visible To Position and Radius);
Create Effect(Filtered Array(All Players(All Teams), Count Of(Global.BallPositions) > 1), Sphere, Aqua, Global.BallPositions[1],
Global.BallRadius, Visible To Position and Radius);
Create Effect(Filtered Array(All Players(All Teams), Count Of(Global.BallPositions) > 2), Sphere, Aqua, Global.BallPositions[2],
Global.BallRadius, Visible To Position and Radius);
Create Effect(Filtered Array(All Players(All Teams), Count Of(Global.BallPositions) > 3), Sphere, Aqua, Global.BallPositions[3],
Global.BallRadius, Visible To Position and Radius);
Create Effect(Filtered Array(All Players(All Teams), Count Of(Global.BallPositions) > 4), Sphere, Aqua, Global.BallPositions[4],
Global.BallRadius, Visible To Position and Radius);
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
Call Subroutine(TeleportBots);
}
}
rule("Ball is destroyed in pregame")
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Global;
}
conditions
{
Global.IsInPregame == True;
Global.Mode == 3;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
}
actions
{
Global.BallPositions = Empty Array;
Global.BallPositions = Append To Array(Global.BallPositions, Vector(-12, 1.500, 0));
Call Subroutine(SetRandomPosition);
}
}
rule("Shooting")
rule("Set stuff to move ball")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
((Hero Of(Event Player) == Hero(Mei) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) != Hero(Mei)
&& Is Firing Primary(Event Player))) == True;
Global.Mode == 3;
Global.IsInPregame != True;
}
actions
{
Event Player.FacingDirection = Facing Direction Of(Event Player);
If(Event Player.ProjectileDelay > 0);
Wait(Event Player.ProjectileDelay, Ignore Condition);
Event Player.FacingDirection = Facing Direction Of(Event Player);
End;
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, False);
Event Player.ShotsFired += 1;
Event Player.EyeLocationWhenFired = Eye Position(Event Player);
Event Player.RaycastPrimaryFire = Ray Cast Hit Position(Event Player.EyeLocationWhenFired,
Event Player.EyeLocationWhenFired + Event Player.FacingDirection * 40, Null, All Players(All Teams), False);
Event Player.RaycastDistance = Distance Between(Event Player, Event Player.RaycastPrimaryFire);
If(Event Player.IsProjectileHero);
Wait(Distance Between(Event Player, Global.BallPositions[0]) / Event Player.ProjectileSpeed, Ignore Condition);
End;
"Loop through all ball positions"
For Global Variable(BallPositionsCheckLoop, 0, Count Of(Global.BallPositions), 1);
"Loop from player position to wall"
For Player Variable(Event Player, ShootLoop, 0, Event Player.RaycastDistance, 0.250);
"Set current position in loop"
Event Player.CurrentCheckPosition = Ray Cast Hit Position(Event Player.EyeLocationWhenFired,
Event Player.EyeLocationWhenFired + Event Player.FacingDirection * Event Player.ShootLoop, All Players(All Teams),
Event Player, True);
"Check if current loop position is in ball"
If(Distance Between(Global.BallPositions[Global.BallPositionsCheckLoop], Event Player.CurrentCheckPosition)
< Global.BallRadius + Event Player.ProjectileSize);
"If in healthy mode and target health is higher than 0"
If(Global.HealthyTargets && Global.CurrentTargetHealth > 0);
Global.CurrentTargetHealth -= 1;
Else;
If(Global.HealthyTargets);
Call Subroutine(ResetTargetHealth);
End;
"Remove current ball from array"
Global.BallPositions = Remove From Array(Global.BallPositions, Global.BallPositions[Global.BallPositionsCheckLoop]);
End;
"Set position for effects to play at"
Event Player.HitPosition[0] = Event Player.CurrentCheckPosition;
"Play a bunch of effects at hit location"
Play Effect(All Players(All Teams), Buff Explosion Sound, Yellow, Event Player.HitPosition, Global.BallRadius * 100);
Play Effect(All Players(All Teams), Good Explosion, Sky Blue, Event Player.HitPosition, Global.BallRadius * 1);
Play Effect(All Players(All Teams), Bad Explosion, Blue, Event Player.HitPosition, Global.BallRadius * 2);
Event Player.ShotsLanded += 1;
Global.BallPositionsCheckLoop = 20;
Event Player.ShootLoop = 40;
Call Subroutine(SetBallSize);
End;
End;
End;
Global.MovingTime = Random Integer(0.500, 1.500);
Global.MovingDirection = Random Value In Array(Global.PositiveOrNegative);
Wait(Global.MovingTime, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Not shooting")
rule("Move ball")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
((Hero Of(Event Player) == Hero(Mei) && !Is Firing Secondary(Event Player)) || (Hero Of(Event Player) != Hero(Mei)
&& !Is Firing Primary(Event Player))) == True;
Global.CountdownActive != True;
Global.Mode == 3;
Global.IsInPregame != True;
}
actions
{
Wait(Event Player.ProjectileDelay, Ignore Condition);
Wait(0.050, Ignore Condition);
Call Subroutine(EnableFire);
Global.BallPositions[0] = Global.BallPositions[0] + Vector(0, 0, 0.100 * Global.MovingDirection);
Call Subroutine(TeleportBots);
Wait(0.016, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Effect where player hit ball")
rule("Is ball out of bounds on the negative side")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) < -12;
}
actions
{
Create Effect(Is True For All(Event Player.HitPosition, Y Component Of(Current Array Element) != 0), Sphere, Red,
Event Player.HitPosition, Max(Event Player.ProjectileSize, 0.050), Visible To Position and Radius);
Global.MovingDirection = 1;
}
}
rule("Remove hit effect after period")
rule("Is ball out of bounds on the positive side")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Y Component Of(Event Player.HitPosition[0]) != 0;
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) > 12;
}
actions
{
Wait(0.750, Abort When False);
Event Player.HitPosition[0] = Vector(0, 0, -100);
Global.MovingDirection = -1;
}
}
disabled rule("----------------------------------------- Grid mode = 0")
disabled rule("--- Color select")
{
event
{
Ongoing - Global;
}
}
rule("Create grid positions array")
rule("Create color select bubbles and locations")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 0;
Global.IsInPregame != True;
}
actions
{
Global.GridDone = False;
Global.GridPositions = Empty Array;
For Global Variable(GridLoopY, 0, 5, 1);
For Global Variable(GridLoopZ, -3, 3, 1);
Global.GridPositions = Append To Array(Global.GridPositions, Global.GridStart + Vector(0, Global.GridLoopY * 1.100,
Global.GridLoopZ * 1.100));
End;
End;
Global.GridDone = True;
Global.BubbleColor = Color(Aqua);
Wait(1, Ignore Condition);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Target color"), First Of(
Global.ColorSelectBubblePositions) + Vector(0, 0, 0), 1.250, Do Not Clip, Visible To Position String and Color,
Global.BubbleColor, Default Visibility);
"Create array for positions of color select effects"
Global.ColorSelectBubblePositions = Array(Vector(5, 10, -20), Vector(5, 8.500, -20), Vector(5, 7, -20), Vector(5, 5.500, -20),
Vector(5, 4, -20));
"Create effects"
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Color(Aqua),
Global.ColorSelectBubblePositions[0], 0.500, Visible To);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Color(White),
Global.ColorSelectBubblePositions[1], 0.500, Visible To);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Color(Red), Global.ColorSelectBubblePositions[2],
0.500, Visible To);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Color(Lime Green),
Global.ColorSelectBubblePositions[3], 0.500, Visible To);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Color(Violet),
Global.ColorSelectBubblePositions[4], 0.500, Visible To);
}
}
rule("Create x number of balls")
rule("Select aqua")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.GridDone == True;
Global.IsInPregame != True;
Global.Mode == 0;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[0]) < 0.500;
}
actions
{
Global.BallPositions = Empty Array;
For Global Variable(RandomLoop, 0, Global.GridNumberOfBalls, 1);
Global.BallPositions = Append To Array(Global.BallPositions, Random Value In Array(Remove From Array(Global.GridPositions,
Global.BallPositions)));
End;
Global.BubbleColor = Color(Aqua);
Play Effect(All Players(All Teams), Good Explosion, Color(Aqua), Global.ColorSelectBubblePositions[0], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Aqua), Global.ColorSelectBubblePositions[0], 50);
}
}
rule("Create new grid ball if ball is removed")
rule("Select white")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Count Of(Global.BallPositions) < Global.GridNumberOfBalls;
Global.GridDone == True;
Global.IsInPregame != True;
Global.Mode == 0;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[1]) < 0.500;
}
actions
{
Global.BallPositions = Append To Array(Global.BallPositions, Random Value In Array(Remove From Array(Global.GridPositions,
Global.BallPositions)));
Loop If Condition Is True;
Global.BubbleColor = Color(White);
Play Effect(All Players(All Teams), Good Explosion, Color(White), Global.ColorSelectBubblePositions[1], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(White), Global.ColorSelectBubblePositions[1], 50);
}
}
disabled rule("----------------------------------------- Standard mode = 1")
rule("Select red")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
}
rule("Subroutine - Set random position")
{
event
conditions
{
Subroutine;
SetRandomPosition;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[2]) < 0.500;
}
actions
{
Global.BallPositions = Append To Array(Global.BallPositions, Global.GridStart + Vector(Random Real(-6, 2), Random Real(0, 4),
Random Real(-6, 6)));
Global.BubbleColor = Color(Red);
Play Effect(All Players(All Teams), Good Explosion, Color(Red), Global.ColorSelectBubblePositions[2], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Red), Global.ColorSelectBubblePositions[2], 50);
}
}
rule("Create ball at random position")
rule("Select lime green")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 1;
Global.IsInPregame != True;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[3]) < 0.500;
}
actions
{
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
Global.BubbleColor = Color(Lime Green);
Play Effect(All Players(All Teams), Good Explosion, Color(Lime Green), Global.ColorSelectBubblePositions[3], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Lime Green), Global.ColorSelectBubblePositions[3], 50);
}
}
rule("Create new grid ball if ball is removed")
rule("Select lime violet")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 1;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[4]) < 0.500;
}
actions
{
Call Subroutine(SetRandomPosition);
Global.BubbleColor = Color(Violet);
Play Effect(All Players(All Teams), Good Explosion, Color(Violet), Global.ColorSelectBubblePositions[4], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Violet), Global.ColorSelectBubblePositions[4], 50);
}
}
disabled rule("----------------------------------------- Awareness mode = 2")
disabled rule("--- Size select")
{
event
{
Ongoing - Global;
}
}
rule("Subroutine - Set random 360 position")
rule("Create color select bubbles and locations")
{
event
{
Subroutine;
SetRandom360Position;
Ongoing - Global;
}
actions
{
Global.BallPositions = Append To Array(Global.BallPositions, Vector(0, 0, 0) + Vector(Random Real(5, 15), Random Real(1, 6),
Random Real(5, 15)));
Global.BallPositions[0] = Vector(X Component Of(Global.BallPositions[0]) * Random Value In Array(Global.PositiveOrNegative),
Y Component Of(Global.BallPositions[0]), Z Component Of(Global.BallPositions[0]) * Random Value In Array(
Global.PositiveOrNegative));
Wait(0.150, Ignore Condition);
Play Effect(All Players(All Teams), Debuff Impact Sound, White, Global.BallPositions[0], 100);
Global.BubbleColor = Color(Aqua);
Wait(1, Ignore Condition);
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Target size"), First Of(
Global.SizeBubblePositions) + Vector(0, 0, 0), 1.250, Do Not Clip, Visible To Position String and Color, Color(Gray),
Default Visibility);
"Create array for positions of color select effects"
Global.SizeBubblePositions = Array(Vector(-5, 10, -20), Vector(-5, 8.500, -20), Vector(-5, 7, -20), Vector(-5, 5.500, -20));
"Create effects"
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.BallRadius == 0.500 ? Color(Green)
: Color(White), Global.SizeBubblePositions[0], 0.500, Visible To and Color);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.BallRadius == 0.400 ? Color(Green)
: Color(White), Global.SizeBubblePositions[1], 0.400, Visible To and Color);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.BallRadius == 0.300 ? Color(Green)
: Color(White), Global.SizeBubblePositions[2], 0.300, Visible To and Color);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.BallRadius == 0.200 ? Color(Green)
: Color(White), Global.SizeBubblePositions[3], 0.200, Visible To and Color);
}
}
rule("Create ball at random position")
rule("Select 0.500 size")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.SizeBubblePositions[0]) < 0.500;
}
actions
{
Global.BallPositions = Empty Array;
Call Subroutine(SetRandom360Position);
Global.BallRadius = 0.500;
Global.SelectedBallRadius = 0.500;
Play Effect(All Players(All Teams), Good Explosion, Color(Green), Global.SizeBubblePositions[0], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Green), Global.SizeBubblePositions[0], 50);
}
}
rule("Create new grid ball if ball is removed")
rule("Select 0.400 size")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.SizeBubblePositions[1]) < 0.400;
}
actions
{
Call Subroutine(SetRandom360Position);
Global.BallRadius = 0.400;
Global.SelectedBallRadius = 0.400;
Play Effect(All Players(All Teams), Good Explosion, Color(Green), Global.SizeBubblePositions[1], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Green), Global.SizeBubblePositions[1], 50);
}
}
rule("Create noise")
rule("Select 0.300 size")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.SizeBubblePositions[2]) < 0.300;
}
actions
{
Create Effect(All Players(All Teams), Beacon Sound, White, Global.BallPositions[0], 150, Visible To Position and Radius);
Global.NoiseEffect = Last Created Entity;
Global.BallRadius = 0.300;
Global.SelectedBallRadius = 0.300;
Play Effect(All Players(All Teams), Good Explosion, Color(Green), Global.SizeBubblePositions[2], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Green), Global.SizeBubblePositions[2], 50);
}
}
rule("Remove noise")
rule("Select 0.200 size")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame == True;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.SizeBubblePositions[3]) < 0.200;
}
actions
{
Destroy Effect(Global.NoiseEffect);
Global.BallRadius = 0.200;
Global.SelectedBallRadius = 0.200;
Play Effect(All Players(All Teams), Good Explosion, Color(Green), Global.SizeBubblePositions[3], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Green), Global.SizeBubblePositions[3], 50);
}
}
disabled rule("----------------------------------------- Strafing targets mode = 3")
disabled rule("--- Modifiers select")
{
event
{
Ongoing - Global;
}
}
rule("Create ball at random position")
rule("Create modifier select bubbles and locations")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
}
actions
{
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
Wait(0.250, Ignore Condition);
"Create array for positions of color select effects"
Global.ModifierSelectBubblePositions = Array(Vector(-20, 10, -5), Vector(-20, 8, -5), Vector(-20, 6, -5), Vector(-20, 4, 5),
Vector(-20, 2, -5));
"Healthy targets"
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Healthy targets"),
Global.ModifierSelectBubblePositions[0] + Vector(0, -1.250, -3), 1.250, Do Not Clip, Visible To Position String and Color,
Global.HealthyTargets == 1 ? Color(Green) : Color(White), Default Visibility);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.HealthyTargets ? Color(Green) : Color(
White), Global.ModifierSelectBubblePositions[0], 0.750, Visible To and Color);
"Random sizes"
Create In-World Text(Filtered Array(All Players(All Teams), Global.IsInPregame), Custom String("Random sizes"),
Global.ModifierSelectBubblePositions[1] + Vector(0, -1.250, -3), 1.250, Do Not Clip, Visible To Position String and Color,
Global.RandomBalls == 1 ? Color(Green) : Color(White), Default Visibility);
Create Effect(Filtered Array(All Players(All Teams), Global.IsInPregame), Sphere, Global.RandomBalls ? Color(Green) : Color(White),
Global.ModifierSelectBubblePositions[1], 0.750, Visible To and Color);
}
}
rule("Create new grid ball if ball is removed")
rule("Toggle healthy targets")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModifierSelectBubblePositions[0]) < 0.750;
}
actions
{
Call Subroutine(SetRandomPosition);
Global.HealthyTargets = !Global.HealthyTargets;
Call Subroutine(ResetTargetHealth);
Play Effect(All Players(All Teams), Good Explosion, Global.HealthyTargets ? Color(Green) : Color(White),
Global.ModifierSelectBubblePositions[0], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Global.HealthyTargets ? Color(Green) : Color(White),
Global.ModifierSelectBubblePositions[0], 50);
}
}
rule("Set stuff to move ball")
rule("Healthy targets health bar")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Is Dummy Bot(Event Player) == True;
}
actions
{
Global.MovingTime = Random Integer(0.500, 1.500);
Global.MovingDirection = Random Value In Array(Global.PositiveOrNegative);
Wait(Global.MovingTime, Ignore Condition);
Loop If Condition Is True;
Create Progress Bar In-World Text(Filtered Array(All Players(All Teams), Global.HealthyTargets),
100 / 4 * Event Player.CurrentBubbleHealth, Null, Update Every Frame(Position Of(Event Player) + Vector(0,
Global.BallRadius * 1.100, 0)), 0.050, Clip Against Surfaces, Color(Red), Color(White), Visible To Position Values and Color,
Default Visibility);
}
}
rule("Move ball")
rule("Subroutine - Reset healthy target health")
{
event
{
Ongoing - Global;
Subroutine;
ResetTargetHealth;
}
actions
{
Filtered Array(All Players(All Teams), Is Dummy Bot(Current Array Element)).CurrentBubbleHealth = 4;
}
}
rule("Toggle random sized targets")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModifierSelectBubblePositions[1]) < 0.750;
}
actions
{
Global.BallPositions[0] = Global.BallPositions[0] + Vector(0, 0, 0.150 * Global.MovingDirection);
Wait(0.025, Ignore Condition);
Loop If Condition Is True;
Global.RandomBalls = !Global.RandomBalls;
Call Subroutine(SetBallSize);
Play Effect(All Players(All Teams), Good Explosion, Global.RandomBalls ? Color(Green) : Color(White),
Global.ModifierSelectBubblePositions[1], 1);
Play Effect(All Players(All Teams), Buff Impact Sound, Global.RandomBalls ? Color(Green) : Color(White),
Global.ModifierSelectBubblePositions[1], 50);
}
}
rule("Is ball out of bounds on the negative side")
rule("Subroutine - Set random ball size")
{
event
{
Ongoing - Global;
Subroutine;
SetBallSize;
}
conditions
actions
{
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) < -12;
If(Global.RandomBalls);
Global.BallRadius = Random Real(0.150, 0.550);
Else;
Global.BallRadius = Global.SelectedBallRadius;
End;
}
}
actions
disabled rule("--- Special cases")
{
event
{
Global.MovingDirection = 1;
Ongoing - Global;
}
}
rule("Is ball out of bounds on the positive side")
rule("Cancel Mccree right click")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
McCree;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) > 12;
Is Firing Secondary(Event Player) == True;
}
actions
{
Global.MovingDirection = -1;
Wait(0.780, Abort When False);
Cancel Primary Action(Event Player);
}
}