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"
}
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
}
}
}
}
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
19: SpawnPosition
20: NoiseEffect
21: PositiveOrNegative
22: MovingTime
23: MovingDirection
24: HealthyTargets
25: CurrentTargetHealth
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
}
subroutines
{
0: SetRandomPosition
1: SetBallSize
2: EnableFire
3: SetRandom360Position
4: ResetTargetHealth
5: ChaseReactionTime
6: FiringWeapon
}
disabled rule("------------------------------------------- Initialise")
{
event
{
Ongoing - Global;
}
}
rule("Initialise")
{
event
{
Ongoing - Global;
}
actions
{
Disable Inspector Recording;
Disable Built-In Game Mode Music;
Global.BallRadius = 0.500;
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.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;
}
}
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")
{
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?")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) == True;
}
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;
}
}
rule("Is not projectile hero?")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) != True;
}
actions
{
Event Player.IsProjectileHero = False;
Event Player.ProjectileSize = 0;
Event Player.ProjectileDelay = 0;
Event Player.ProjectileSpeed = 0;
}
}
rule("Special case, Ana in scope")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Hero Of(Event Player) == Hero(Ana);
Is Firing Secondary(Event Player) == True;
}
actions
{
"Projectile speed per second"
Event Player.ProjectileSpeed = 0;
}
}
rule("Special case, Ana not in scope")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Hero Of(Event Player) == Hero(Ana);
Is Firing Secondary(Event Player) != True;
}
actions
{
"Projectile speed per second"
Event Player.ProjectileSpeed = 125;
}
}
disabled rule("------------------------------------------- HUD")
{
event
{
Ongoing - Global;
}
}
rule("HUD - Accuracy")
{
event
{
Ongoing - Each Player;
All;
All;
}
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);
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, White, White, White,
Visible To and String, Default Visibility);
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
{
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);
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, White, Sky Blue, White, Visible To and String, Default Visibility);
Server Load Peak, Server Load Average), Null, Right, -4, Color(White), Color(Sky Blue), Color(White), Visible To and String,
Default Visibility);
}
}
rule("HUD - Workshop.codes link")
{
event
{
Ongoing - Global;
}
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);
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);
}
}
disabled rule("----------------------------------------- Pregame")
{
event
{
Ongoing - Global;
}
}
rule("Is in pregame")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame == True;
Has Spawned(Event Player) == True;
Is Assembling Heroes != True;
}
actions
{
Call Subroutine(EnableFire);
Global.BallPositions = Empty Array;
Global.BallPositions = Append To Array(Global.BallPositions, Vector(-12, 1.500, 0));
Set Match Time(3599);
}
}
rule("Is not in pregame")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame != True;
}
}
rule("Is in pregame game selection HUD")
{
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);
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, White,
White, Turquoise, Visible To and String, Default Visibility);
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, 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);
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, White, White, White, Visible To and String, Default Visibility);
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,
White, White, White, Visible To and String, Default Visibility);
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, Red, White,
White, Visible To and String, Default Visibility);
"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, White, White, White, Visible To and String, Default Visibility);
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, White, White, White, Visible To and String,
Default Visibility);
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);
}
}
rule("Is in pregame in-world text")
{
event
{
Ongoing - Global;
}
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);
Global.BallPositions[0], 1.250, Do Not Clip, Visible To Position and String, Color(Turquoise), Default Visibility);
}
}
rule("Start Grid Mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 1) == True;
Is Button Held(Event Player, Secondary Fire) == 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
{
Global.IsInPregame = False;
Global.Mode = 0;
}
}
rule("Start Standard Mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 1) == True;
Is Button Held(Event Player, Primary Fire) == True;
Is Button Held(Event Player, Button(Ability 1)) == True;
Is Button Held(Event Player, Button(Primary Fire)) == True;
Global.IsInPregame == True;
}
actions
{
Global.IsInPregame = False;
Global.Mode = 1;
}
}
rule("Start Awareness Mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 1) == True;
Is Button Held(Event Player, Interact) == True;
Is Button Held(Event Player, Button(Ability 1)) == True;
Is Button Held(Event Player, Button(Interact)) == True;
Global.IsInPregame == True;
}
actions
{
Global.IsInPregame = False;
Global.Mode = 2;
}
}
rule("Start Strafing Targets Mode")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 1) == True;
Is Button Held(Event Player, Crouch) == True;
Is Button Held(Event Player, Button(Ability 1)) == True;
Is Button Held(Event Player, Button(Crouch)) == True;
Global.IsInPregame == True;
}
actions
{
Global.IsInPregame = False;
Global.Mode = 3;
}
}
rule("Subroutine - Enable primary or secondary")
{
event
{
Subroutine;
EnableFire;
}
actions
{
If(Hero Of(Event Player) == Hero(Mei));
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, True);
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);
End;
}
}
rule("Subroutine - Set Ball Size")
{
event
{
Subroutine;
SetBallSize;
}
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;
Else;
Global.BallRadius = 0.500;
End;
End;
}
}
disabled rule("---------------------------------------- Reaction time")
{
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);
}
}
rule("Add to reaction time array")
{
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;
}
}
rule("Calculate average reaction time")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame == True;
Count Of(Event Player.ReactionTimeArray) > 1;
}
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("---------------------------------------- Modifiers")
{
event
{
Ongoing - Global;
}
}
rule("Modifiers HUD")
{
event
{
Ongoing - Global;
}
actions
{
"Title"
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, 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,
White, White, Orange, Visible To and String, Default Visibility);
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, 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);
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, White, White, White,
Visible To and String, Default Visibility);
"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, Green, White, White,
Visible To and String, Default Visibility);
"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, White, White, White, Visible To and String,
Default Visibility);
"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, Green,
White, White, Visible To and String, Default Visibility);
"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, White, White, White,
Visible To and String, Default Visibility);
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, Green, White, White,
Visible To and String, Default Visibility);
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, White, White,
White, Visible To and String, Default Visibility);
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, Green, White, White,
Visible To and String, Default Visibility);
"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);
}
}
rule("Select small size modifier")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 2) == True;
Is Button Held(Event Player, Primary Fire) == True;
Is Button Held(Event Player, Button(Ability 2)) == True;
Is Button Held(Event Player, Button(Primary Fire)) == True;
Global.IsInPregame == True;
}
actions
{
If(Global.SmallBall == True);
Global.BallRadius = 0.500;
Global.SmallBall = False;
Else;
Global.BallRadius = 0.250;
Global.SmallBall = True;
End;
}
}
rule("Random target size")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 2) == True;
Is Button Held(Event Player, Secondary Fire) == True;
Is Button Held(Event Player, Button(Ability 2)) == True;
Is Button Held(Event Player, Button(Secondary Fire)) == True;
Global.IsInPregame == True;
}
actions
{
If(Global.RandomBalls == True);
Global.RandomBalls = False;
Else;
Global.RandomBalls = True;
End;
Call Subroutine(SetBallSize);
}
}
rule("Cannot walk")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.NeedToWalk == False;
Global.IsInPregame == True;
}
actions
{
Set Status(Event Player, Null, Rooted, 9999);
}
}
rule("Can walk")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.NeedToWalk == True;
Global.IsInPregame == True;
}
actions
{
Clear Status(Event Player, Rooted);
}
}
rule("Location modifier")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 2) == True;
Is Button Held(Event Player, Crouch) == True;
Is Button Held(Event Player, Button(Ability 2)) == True;
Is Button Held(Event Player, Button(Crouch)) == True;
Global.IsInPregame == True;
}
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);
}
}
rule("Healthy targets")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Ability 2) == True;
Is Button Held(Event Player, Interact) == True;
Is Button Held(Event Player, Button(Ability 2)) == True;
Is Button Held(Event Player, Button(Interact)) == True;
Global.IsInPregame == True;
}
actions
{
Global.HealthyTargets = !Global.HealthyTargets;
Call Subroutine(ResetTargetHealth);
}
}
rule("Subroutine - Reset healthy target health")
{
event
{
Subroutine;
ResetTargetHealth;
}
actions
{
Global.CurrentTargetHealth = 4;
}
}
rule("Healthy target in-world text")
{
event
{
Ongoing - Global;
}
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);
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, Orange,
Default Visibility);
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, Orange,
Default Visibility);
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, Orange,
Default Visibility);
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, Red,
Default Visibility);
Global.BallPositions[0] + Vector(0, Global.BallRadius, 0), 1, Clip Against Surfaces, Visible To Position and String, Color(
Red), Default Visibility);
}
}
disabled rule("---------------------------------------- Mode is about to start")
{
event
{
Ongoing - Global;
}
}
rule("Countdown")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame != True;
}
actions
{
Create Effect(All Players(All Teams), Sphere, Aqua, Event Player, 2, Visible To Position and Radius);
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, White, Event Player, 100);
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, Aqua, Event Player, 10);
Play Effect(All Players(All Teams), Ring Explosion, Color(Aqua), Event Player, 10);
}
}
disabled rule("--------------------------------------Timer")
{
event
{
Ongoing - Global;
}
}
rule("Start Timer")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.IsInPregame != True;
Global.CountdownActive != True;
}
actions
{
Wait(0.050, Abort When False);
Set Match Time(60.500);
Event Player.CurrentReactionTime = 0;
Call Subroutine(ChaseReactionTime);
}
}
rule("End of timer")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Match Time < 0.500;
}
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);
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("------------------------------------------- Bubbles")
{
event
{
Ongoing - Global;
}
}
rule("Create bubble effects")
{
event
{
Ongoing - Global;
}
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);
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("Ball is destroyed in pregame")
{
event
{
Ongoing - Global;
}
conditions
{
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));
}
}
rule("Shooting")
rule("Subroutine - FiringWeapon")
{
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;
Subroutine;
FiringWeapon;
}
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);
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("Not shooting")
rule("Using Primary Fire on most heroes")
{
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.CountdownActive != True;
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
{
Wait(Event Player.ProjectileDelay, Ignore Condition);
Wait(0.050, Ignore Condition);
Call Subroutine(EnableFire);
If(Is Button Held(Event Player, Button(Secondary Fire)) != True);
Cancel Primary Action(Event Player);
End;
Call Subroutine(FiringWeapon);
}
}
rule("Using Secondary fire with some heroes")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Array Contains(Array(Hero(Mei), Hero(Zarya), Hero(Soldier: 76)), Hero Of(Event Player)) == True;
Is Firing Secondary(Event Player) == True;
}
actions
{
Call Subroutine(FiringWeapon);
}
}
rule("Effect where player hit ball")
{
event
{
Ongoing - Each Player;
All;
All;
}
actions
{
Create Effect(Is True For All(Event Player.HitPosition, Y Component Of(Current Array Element) != 0), Sphere, Red,
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("Remove hit effect after period")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Y Component Of(Event Player.HitPosition[0]) != 0;
}
actions
{
Wait(0.750, Abort When False);
Event Player.HitPosition[0] = Vector(0, 0, -100);
}
}
disabled rule("----------------------------------------- Grid mode = 0")
{
event
{
Ongoing - Global;
}
}
rule("Create grid positions array")
{
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;
}
}
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;
}
}
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
{
Global.BallPositions = Append To Array(Global.BallPositions, Random Value In Array(Remove From Array(Global.GridPositions,
Global.BallPositions)));
Loop If Condition Is True;
}
}
disabled rule("----------------------------------------- Standard mode = 1")
{
event
{
Ongoing - Global;
}
}
rule("Subroutine - Set random position")
{
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)));
}
}
rule("Create ball at random position")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 1;
Global.IsInPregame != True;
}
actions
{
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
}
}
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 1;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
}
actions
{
Call Subroutine(SetRandomPosition);
}
}
disabled rule("----------------------------------------- Awareness mode = 2")
{
event
{
Ongoing - Global;
}
}
rule("Subroutine - Set random 360 position")
{
event
{
Subroutine;
SetRandom360Position;
}
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);
Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Global.BallPositions[0], 100);
}
}
rule("Create ball at random position")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
}
actions
{
Global.BallPositions = Empty Array;
Call Subroutine(SetRandom360Position);
}
}
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("Create noise")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 2;
Global.IsInPregame != True;
}
actions
{
Create Effect(All Players(All Teams), Beacon Sound, White, Global.BallPositions[0], 150, Visible To Position and Radius);
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("Remove noise")
{
event
{
Ongoing - Global;
}
conditions
{
Global.IsInPregame == True;
}
actions
{
Destroy Effect(Global.NoiseEffect);
}
}
disabled rule("----------------------------------------- Strafing targets mode = 3")
{
event
{
Ongoing - Global;
}
}
rule("Create ball at random position")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
}
actions
{
Global.BallPositions = Empty Array;
Call Subroutine(SetRandomPosition);
}
}
rule("Create new grid ball if ball is removed")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Count Of(Global.BallPositions) == 0;
}
actions
{
Call Subroutine(SetRandomPosition);
}
}
rule("Set stuff to move ball")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != 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;
}
}
rule("Move ball")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
}
actions
{
Global.BallPositions[0] = Global.BallPositions[0] + Vector(0, 0, 0.150 * Global.MovingDirection);
Wait(0.025, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Is ball out of bounds on the negative side")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) < -12;
}
actions
{
Global.MovingDirection = 1;
}
}
rule("Is ball out of bounds on the positive side")
{
event
{
Ongoing - Global;
}
conditions
{
Global.Mode == 3;
Global.IsInPregame != True;
Z Component Of(Global.BallPositions[0]) > 12;
}
actions
{
Global.MovingDirection = -1;
}
}