Return to post
settings
{
main
{
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"
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"
}
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
{
No Ammunition Requirement: On
Ultimate Ability: Off
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
{
Roll Always Active: On
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
Bastion
Echo
McCree
Mei
Orisa
Soldier: 76
Widowmaker
Wrecking Ball
Zenyatta
}
}
}
}
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
17: SelectedBallRadius
18: ProjectileHeroes
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
6: FiringWeapon
}
disabled rule("------------------------------------------- Initialise")
{
event
{
Ongoing - Global;
}
}
rule("Initialise")
{
event
{
Ongoing - Global;
}
actions
{
disabled Disable Inspector Recording;
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 = Array(1, -1);
Global.PositiveOrNegative = Empty Array;
Global.PositiveOrNegative = Append To Array(Global.PositiveOrNegative, -1);
Global.PositiveOrNegative = Append To Array(Global.PositiveOrNegative, 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, 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, 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);
}
}
disabled rule("------------------------------------------- HUD")
rule("Create Projectile Heroes array")
{
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("HUD - Accuracy")
rule("Is Projectile Hero?")
{
event
{
Ongoing - Each Player;
All;
All;
}
actions
{
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
conditions
{
Ongoing - Global;
Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) == True;
}
actions
{
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);
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;
}
}
rule("HUD - Workshop.codes link")
rule("Is not projectile hero?")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
actions
conditions
{
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);
Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) != True;
}
}
disabled rule("----------------------------------------- Pregame")
{
event
actions
{
Ongoing - Global;
Event Player.IsProjectileHero = False;
Event Player.ProjectileSize = 0;
Event Player.ProjectileDelay = 0;
Event Player.ProjectileSpeed = 0;
}
}
rule("Pregame HUD")
rule("Special case, Ana in scope")
{
event
{
Ongoing - Global;
}
actions
{
"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);
Ongoing - Each Player;
All;
All;
}
}
rule("Pregame In-world")
{
event
conditions
{
Ongoing - Global;
Hero Of(Event Player) == Hero(Ana);
Is Firing Secondary(Event Player) == True;
}
actions
{
"--- 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);
"Projectile speed per second"
Event Player.ProjectileSpeed = 0;
}
}
rule("Is in pregame")
rule("Special case, Ana not in scope")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame == True;
Has Spawned(Event Player) == True;
Is Assembling Heroes != True;
Hero Of(Event Player) == Hero(Ana);
Is Firing Secondary(Event Player) != True;
}
actions
{
Global.BallPositions = Empty Array;
Global.BallPositions = Append To Array(Global.BallPositions, Vector(-12, 1.500, 0));
Call Subroutine(TeleportBots);
Set Match Time(3599);
"Projectile speed per second"
Event Player.ProjectileSpeed = 125;
}
}
rule("Is not in pregame")
disabled rule("------------------------------------------- HUD")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame != True;
Ongoing - Global;
}
}
rule("Interact to ray cast bubble select")
rule("HUD - Accuracy")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Button(Interact)) == True;
}
actions
{
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);
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, 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("Start selected mode")
rule("HUD - Controls")
{
event
{
Player Dealt Damage;
All;
All;
}
conditions
{
Global.IsInPregame == True;
Ongoing - Global;
}
actions
{
Global.IsInPregame = False;
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, Color(White), Color(Blue), Color(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, Color(White), Color(Sky Blue), Color(White), Visible To and String,
Default Visibility);
}
}
disabled rule("---------------------------------------- Reaction time")
rule("HUD - Workshop.codes link")
{
event
{
Ongoing - Global;
}
}
rule("Subroutine - Start chase on reaction time array")
{
event
{
Subroutine;
ChaseReactionTime;
}
actions
{
Event Player.ReactionTimeArray = Empty Array;
Chase Player Variable At Rate(Event Player, CurrentReactionTime, 1000, 1, Destination and Rate);
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);
}
}
rule("Add to reaction time array")
disabled rule("----------------------------------------- Pregame")
{
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;
}
actions
{
Event Player.ReactionTimeArray = Append To Array(Event Player.ReactionTimeArray, Event Player.CurrentReactionTime);
Event Player.CurrentReactionTime = 0;
Ongoing - Global;
}
}
rule("Calculate average reaction time")
rule("Is in pregame")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame == True;
Count Of(Event Player.ReactionTimeArray) > 1;
Has Spawned(Event Player) == True;
Is Assembling Heroes != True;
}
actions
{
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;
}
}
disabled rule("---------------------------------------- Mode is about to start")
{
event
{
Ongoing - Global;
Call Subroutine(EnableFire);
Global.BallPositions = Empty Array;
Global.BallPositions = Append To Array(Global.BallPositions, Vector(-12, 1.500, 0));
Set Match Time(3599);
}
}
rule("Countdown")
rule("Is not in pregame")
{
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);
}
}
disabled rule("--------------------------------------Timer")
rule("Is in pregame game selection HUD")
{
event
{
Ongoing - Global;
}
}
rule("Start Timer")
{
event
actions
{
Ongoing - Each Player;
All;
All;
"Title"
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(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, Color(
White), Color(White), Color(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, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(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, Color(White), Color(White), Color(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,
Color(White), Color(White), Color(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, Color(Red),
Color(White), Color(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, Color(White), Color(White), Color(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, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Wait(0.020, Ignore Condition);
}
}
conditions
rule("Is in pregame in-world text")
{
event
{
Global.IsInPregame != True;
Global.CountdownActive != True;
Is Dummy Bot(Event Player) != True;
Ongoing - Global;
}
actions
{
"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);
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, Color(Turquoise), Default Visibility);
}
}
rule("End of timer")
rule("Start Grid Mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Match Time < 0.500;
Is Dummy Bot(Event Player) != True;
Is Button Held(Event Player, Button(Ability 1)) == True;
Is Button Held(Event Player, Button(Secondary Fire)) == True;
Global.IsInPregame == True;
Global.HealthyTargets != True;
}
actions
{
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);
Global.IsInPregame = False;
Global.Mode = 0;
}
}
disabled rule("------------------------------------------- Bubbles")
rule("Start Standard Mode")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
}
rule("Create bubble effects & dummy bots")
{
event
conditions
{
Ongoing - Global;
Is Button Held(Event Player, Button(Ability 1)) == True;
Is Button Held(Event Player, Button(Primary Fire)) == True;
Global.IsInPregame == True;
}
actions
{
Global.EffectsArray = Empty Array;
Global.BotsArray = Empty Array;
For Global Variable(Loop, 0, 5, 1);
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);
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);
End;
Global.IsInPregame = False;
Global.Mode = 1;
}
}
rule("Set dummy bot status")
rule("Start Awareness Mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Has Spawned(Event Player) == True;
Is Button Held(Event Player, Button(Ability 1)) == True;
Is Button Held(Event Player, Button(Interact)) == True;
Global.IsInPregame == True;
}
actions
{
Wait(2, 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);
Global.IsInPregame = False;
Global.Mode = 2;
}
}
rule("Create pregame bubble")
rule("Start Strafing Targets Mode")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Button(Ability 1)) == True;
Is Button Held(Event Player, Button(Crouch)) == True;
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(TeleportBots);
Global.IsInPregame = False;
Global.Mode = 3;
}
}
rule("Bubble takes damage")
rule("Subroutine - Enable primary or secondary")
{
event
{
Player Took Damage;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Subroutine;
EnableFire;
}
actions
{
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;
If(Hero Of(Event Player) == Hero(Mei));
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, True);
Else;
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));
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);
End;
}
}
rule("Subroutine [TeleportBots] - Teleport dummy bots to bubble locations")
rule("Subroutine - Set Ball Size")
{
event
{
Subroutine;
TeleportBots;
SetBallSize;
}
actions
{
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));
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;
Else;
Teleport(Global.BotsArray[Global.Loop], Vector(0, 50, 0));
Global.BallRadius = 0.500;
End;
End;
}
}
disabled rule("----------------------------------------- Grid mode = 0")
disabled rule("---------------------------------------- Reaction time")
{
event
{
Ongoing - Global;
}
}
rule("Create grid mode select bubble")
rule("Subroutine - Start chase on reaction time array")
{
event
{
Ongoing - Global;
Subroutine;
ChaseReactionTime;
}
actions
{
"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);
Event Player.ReactionTimeArray = Empty Array;
Chase Player Variable At Rate(Event Player, CurrentReactionTime, 1000, 1, Destination and Rate);
}
}
rule("Select grid mode")
rule("Add to reaction time array")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModeSelectBubblePositions[0]) < 0.750;
((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
{
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);
Event Player.ReactionTimeArray = Append To Array(Event Player.ReactionTimeArray, Event Player.CurrentReactionTime);
Event Player.CurrentReactionTime = 0;
}
}
rule("Create grid positions array")
rule("Calculate average reaction time")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 0;
Global.IsInPregame != True;
Global.IsInPregame == True;
Count Of(Event Player.ReactionTimeArray) > 1;
}
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;
For Player Variable(Event Player, CalculateAverageReactionTimeLoop, 0, Count Of(Event Player.ReactionTimeArray), 1);
Event Player.AverageReactionTime += Event Player.ReactionTimeArray[Event Player.CalculateAverageReactionTimeLoop];
End;
Global.GridDone = True;
Event Player.AverageReactionTime /= Count Of(Event Player.ReactionTimeArray);
Event Player.CurrentReactionTime = 1000;
}
}
rule("Create x number of balls")
disabled rule("---------------------------------------- Modifiers")
{
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("Create new grid ball if ball is removed")
rule("Modifiers HUD")
{
event
{
Ongoing - Global;
}
conditions
{
Count Of(Global.BallPositions) < Global.GridNumberOfBalls;
Global.GridDone == True;
Global.IsInPregame != True;
Global.Mode == 0;
}
actions
{
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;
"Title"
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 10, Color(White), Color(White), Color(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,
Color(White), Color(White), Color(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, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 10, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Global.IsInPregame, Null, Custom String(" "), Null, Left, 10, Color(White), Color(White), Color(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, Color(White), Color(
White), Color(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, Color(Green), Color(White),
Color(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, Color(White), Color(White), Color(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, Color(
Green), Color(White), Color(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, Color(White), Color(
White), Color(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, Color(Green), Color(
White), Color(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, Color(White),
Color(White), Color(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, Color(Green), Color(White),
Color(White), Visible To and String, Default Visibility);
}
}
disabled rule("----------------------------------------- Standard mode = 1")
rule("Select small size modifier")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
}
rule("Create standard mode select bubble")
{
event
conditions
{
Ongoing - Global;
Is Button Held(Event Player, Button(Ability 2)) == True;
Is Button Held(Event Player, Button(Primary Fire)) == True;
Global.IsInPregame == True;
}
actions
{
"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);
If(Global.SmallBall == True);
Global.BallRadius = 0.500;
Global.SmallBall = False;
Else;
Global.BallRadius = 0.250;
Global.SmallBall = True;
End;
}
}
rule("Select standard mode")
rule("Random target size")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModeSelectBubblePositions[1]) < 0.750;
Is Button Held(Event Player, Button(Ability 2)) == True;
Is Button Held(Event Player, Button(Secondary Fire)) == True;
Global.IsInPregame == True;
}
actions
{
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);
If(Global.RandomBalls == True);
Global.RandomBalls = False;
Else;
Global.RandomBalls = True;
End;
Call Subroutine(SetBallSize);
}
}
rule("Subroutine - Set random position")
rule("Cannot walk")
{
event
{
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;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 1;
Global.IsInPregame != True;
Global.NeedToWalk == False;
Global.IsInPregame == True;
}
actions
{
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
Set Status(Event Player, Null, Rooted, 9999);
}
}
rule("Create new grid ball if ball is removed")
rule("Can walk")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 1;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
Global.NeedToWalk == True;
Global.IsInPregame == True;
}
actions
{
Call Subroutine(SetRandomPosition);
Clear Status(Event Player, Rooted);
}
}
disabled rule("----------------------------------------- 360 mode = 2")
rule("Location modifier")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
}
rule("Create 360 mode select bubble")
{
event
conditions
{
Ongoing - Global;
Is Button Held(Event Player, Button(Ability 2)) == True;
Is Button Held(Event Player, Button(Crouch)) == True;
Global.IsInPregame == True;
}
actions
{
"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);
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);
}
}
rule("Select 360 mode")
rule("Healthy targets")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModeSelectBubblePositions[2]) < 0.750;
Is Button Held(Event Player, Button(Ability 2)) == True;
Is Button Held(Event Player, Button(Interact)) == True;
Global.IsInPregame == True;
}
actions
{
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);
Global.HealthyTargets = !Global.HealthyTargets;
Call Subroutine(ResetTargetHealth);
}
}
rule("Subroutine - Set random 360 position")
rule("Subroutine - Reset healthy target health")
{
event
{
Subroutine;
SetRandom360Position;
ResetTargetHealth;
}
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));
Call Subroutine(TeleportBots);
Wait(0.150, Ignore Condition);
Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Global.BallPositions[0], 100);
Global.CurrentTargetHealth = 4;
}
}
rule("Create ball at random position")
rule("Healthy target in-world text")
{
event
{
Ongoing - Global;
}
conditions
actions
{
Global.Mode == 2;
Global.IsInPregame != True;
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, Color(
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, Color(
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, Color(
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, Color(
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, Color(
Red), Default Visibility);
}
}
actions
disabled rule("---------------------------------------- Mode is about to start")
{
event
{
Global.BallPositions = Empty Array;
Call Subroutine(SetRandom360Position);
Ongoing - Global;
}
}
rule("Create new grid ball if ball is removed")
rule("Countdown")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
}
actions
{
Call Subroutine(SetRandom360Position);
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);
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);
}
}
rule("Create noise")
disabled rule("--------------------------------------Timer")
{
event
{
Ongoing - Global;
}
}
rule("Start Timer")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
Global.CountdownActive != True;
}
actions
{
Create Effect(All Players(All Teams), Beacon Sound, Color(White), Global.BallPositions[0], 150, Visible To Position and Radius);
Global.NoiseEffect = Last Created Entity;
Wait(0.050, Abort When False);
Set Match Time(60.500);
Event Player.CurrentReactionTime = 0;
Call Subroutine(ChaseReactionTime);
}
}
rule("Remove noise")
rule("End of timer")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame == True;
Match Time < 0.500;
}
actions
{
Destroy Effect(Global.NoiseEffect);
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, 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);
Destroy Effect(Global.CountdownSphereEffect);
Global.IsInPregame = True;
Global.CountdownActive = False;
Event Player.CurrentReactionTime = 1000;
}
}
disabled rule("----------------------------------------- Strafing targets mode = 3")
disabled rule("------------------------------------------- Bubbles")
{
event
{
Ongoing - Global;
}
}
rule("Create strafing mode select bubble")
rule("Create bubble effects")
{
event
{
Ongoing - Global;
}
actions
{
"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);
Create Effect(Filtered Array(All Players(All Teams), Count Of(Global.BallPositions) > 0), Sphere, Color(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, Color(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, Color(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, Color(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, Color(Aqua),
Global.BallPositions[4], Global.BallRadius, Visible To Position and Radius);
}
}
rule("Select strafing mode")
rule("Ball is destroyed in pregame")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModeSelectBubblePositions[3]) < 0.750;
Global.IsInPregame == True;
Count Of(Global.BallPositions) == 0;
}
actions
{
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);
Global.BallPositions = Empty Array;
Global.BallPositions = Append To Array(Global.BallPositions, Vector(-12, 1.500, 0));
}
}
rule("Create ball at random position")
rule("Subroutine - FiringWeapon")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Subroutine;
FiringWeapon;
}
actions
{
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
Call Subroutine(TeleportBots);
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;
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, Color(Yellow), Event Player.HitPosition, Global.BallRadius * 100);
Play Effect(All Players(All Teams), Good Explosion, Color(Sky Blue), Event Player.HitPosition, Global.BallRadius * 1);
Play Effect(All Players(All Teams), Bad Explosion, Color(Blue), Event Player.HitPosition, Global.BallRadius * 2);
Event Player.ShotsLanded += 1;
Global.BallPositionsCheckLoop = 20;
Event Player.ShootLoop = 40;
Call Subroutine(SetBallSize);
End;
End;
End;
}
}
rule("Create new grid ball if ball is removed")
rule("Using Primary Fire on most heroes")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
Hero Of(Event Player) != Hero(Mei);
Hero Of(Event Player) != Hero(Hanzo);
Hero Of(Event Player) != Hero(Reinhardt);
Hero Of(Event Player) != Hero(Zarya);
Is Firing Primary(Event Player) == True;
}
actions
{
Call Subroutine(SetRandomPosition);
If(Is Button Held(Event Player, Button(Secondary Fire)) != True);
Cancel Primary Action(Event Player);
End;
Call Subroutine(FiringWeapon);
}
}
rule("Set stuff to move ball")
rule("Using Secondary fire with some heroes")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Array Contains(Array(Hero(Mei), Hero(Zarya), Hero(Soldier: 76)), Hero Of(Event Player)) == True;
Is Firing Secondary(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;
Call Subroutine(FiringWeapon);
}
}
rule("Move ball")
rule("Effect where player hit ball")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Ongoing - Each Player;
All;
All;
}
actions
{
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;
Create Effect(Is True For All(Event Player.HitPosition, Y Component Of(Current Array Element) != 0), Sphere, Color(Red),
Event Player.HitPosition, Max(Event Player.ProjectileSize, 0.050), Visible To Position and Radius);
}
}
rule("Is ball out of bounds on the negative side")
rule("Remove hit effect after period")
{
event
{
Ongoing - Global;
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) < -12;
Y Component Of(Event Player.HitPosition[0]) != 0;
}
actions
{
Global.MovingDirection = 1;
Wait(0.750, Abort When False);
Event Player.HitPosition[0] = Vector(0, 0, -100);
}
}
rule("Is ball out of bounds on the positive side")
disabled rule("----------------------------------------- Grid mode = 0")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) > 12;
}
actions
{
Global.MovingDirection = -1;
}
}
disabled rule("--- Color select")
rule("Create grid positions array")
{
event
{
Ongoing - Global;
}
}
rule("Create color select bubbles and locations")
{
event
conditions
{
Ongoing - Global;
Global.Mode == 0;
Global.IsInPregame != True;
}
actions
{
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);
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;
}
}
rule("Select aqua")
rule("Create x number of balls")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[0]) < 0.500;
Global.GridDone == True;
Global.IsInPregame != True;
Global.Mode == 0;
}
actions
{
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);
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;
}
}
rule("Select white")
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[1]) < 0.500;
Count Of(Global.BallPositions) < Global.GridNumberOfBalls;
Global.GridDone == True;
Global.IsInPregame != True;
Global.Mode == 0;
}
actions
{
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);
Global.BallPositions = Append To Array(Global.BallPositions, Random Value In Array(Remove From Array(Global.GridPositions,
Global.BallPositions)));
Loop If Condition Is True;
}
}
rule("Select red")
disabled rule("----------------------------------------- Standard mode = 1")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
}
conditions
rule("Subroutine - Set random position")
{
event
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[2]) < 0.500;
Subroutine;
SetRandomPosition;
}
actions
{
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);
Global.BallPositions = Append To Array(Global.BallPositions, Global.GridStart + Vector(Random Real(-6, 2), Random Real(0, 4),
Random Real(-6, 6)));
}
}
rule("Select lime green")
rule("Create ball at random position")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[3]) < 0.500;
Global.Mode == 1;
Global.IsInPregame != True;
}
actions
{
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);
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
}
}
rule("Select lime violet")
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ColorSelectBubblePositions[4]) < 0.500;
Global.Mode == 1;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
}
actions
{
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);
Call Subroutine(SetRandomPosition);
}
}
disabled rule("--- Size select")
disabled rule("----------------------------------------- Awareness mode = 2")
{
event
{
Ongoing - Global;
}
}
rule("Create color select bubbles and locations")
rule("Subroutine - Set random 360 position")
{
event
{
Ongoing - Global;
Subroutine;
SetRandom360Position;
}
actions
{
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);
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, Color(White), Global.BallPositions[0], 100);
}
}
rule("Select 0.500 size")
rule("Create ball at random position")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.SizeBubblePositions[0]) < 0.500;
Global.Mode == 2;
Global.IsInPregame != True;
}
actions
{
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);
Global.BallPositions = Empty Array;
Call Subroutine(SetRandom360Position);
}
}
rule("Select 0.400 size")
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.SizeBubblePositions[1]) < 0.400;
Global.Mode == 2;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
}
actions
{
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);
Call Subroutine(SetRandom360Position);
}
}
rule("Select 0.300 size")
rule("Create noise")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.SizeBubblePositions[2]) < 0.300;
Global.Mode == 2;
Global.IsInPregame != True;
}
actions
{
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);
Create Effect(All Players(All Teams), Beacon Sound, Color(White), Global.BallPositions[0], 150, Visible To Position and Radius);
Global.NoiseEffect = Last Created Entity;
}
}
rule("Select 0.200 size")
rule("Remove noise")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.SizeBubblePositions[3]) < 0.200;
Global.IsInPregame == True;
}
actions
{
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);
Destroy Effect(Global.NoiseEffect);
}
}
disabled rule("--- Modifiers select")
disabled rule("----------------------------------------- Strafing targets mode = 3")
{
event
{
Ongoing - Global;
}
}
rule("Create modifier select bubbles and locations")
rule("Create ball at random position")
{
event
{
Ongoing - Global;
}
actions
{
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("Toggle healthy targets")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModifierSelectBubblePositions[0]) < 0.750;
Global.Mode == 3;
Global.IsInPregame != True;
}
actions
{
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);
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
}
}
rule("Healthy targets health bar")
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Global.Mode == 3;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
}
actions
{
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);
Call Subroutine(SetRandomPosition);
}
}
rule("Subroutine - Reset healthy target health")
rule("Set stuff to move ball")
{
event
{
Subroutine;
ResetTargetHealth;
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
}
actions
{
Filtered Array(All Players(All Teams), Is Dummy Bot(Current Array Element)).CurrentBubbleHealth = 4;
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("Toggle random sized targets")
rule("Move ball")
{
event
{
Ongoing - Each Player;
All;
All;
Ongoing - Global;
}
conditions
{
Event Player.RaycastBubbleSelect != False;
Distance Between(Event Player.RaycastBubbleSelect, Global.ModifierSelectBubblePositions[1]) < 0.750;
Global.Mode == 3;
Global.IsInPregame != True;
}
actions
{
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);
Global.BallPositions[0] = Global.BallPositions[0] + Vector(0, 0, 0.150 * Global.MovingDirection);
Wait(0.025, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Subroutine - Set random ball size")
rule("Is ball out of bounds on the negative side")
{
event
{
Subroutine;
SetBallSize;
Ongoing - Global;
}
actions
conditions
{
If(Global.RandomBalls);
Global.BallRadius = Random Real(0.150, 0.550);
Else;
Global.BallRadius = Global.SelectedBallRadius;
End;
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) < -12;
}
}
disabled rule("--- Special cases")
{
event
actions
{
Ongoing - Global;
Global.MovingDirection = 1;
}
}
rule("Cancel Mccree right click")
rule("Is ball out of bounds on the positive side")
{
event
{
Ongoing - Each Player;
All;
McCree;
Ongoing - Global;
}
conditions
{
Is Firing Secondary(Event Player) == True;
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) > 12;
}
actions
{
Wait(0.780, Abort When False);
Cancel Primary Action(Event Player);
Global.MovingDirection = -1;
}
}