Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "\"Sparc\" Is a recreation of the not at all popular VR game by the same name. Read more at workshop.codes/sparc. Made by Mitsiee. - v1.0"
  • Description: "\"Sparc\" Is a recreation of the not at all popular VR game by the same name. Read more at workshop.codes/sparc. Made by Mitsiee. - v1.1"
  • }
  • lobby
  • {
  • Allow Players Who Are In Queue: Yes
  • Match Voice Chat: Enabled
  • Max Spectators: 12
  • Max Team 1 Players: 1
  • Max Team 2 Players: 1
  • }
  • modes
  • {
  • Team Deathmatch
  • {
  • Game Length In Minutes: 15
  • Score To Win: 5
  • enabled maps
  • {
  • Workshop Chamber
  • }
  • }
  • General
  • {
  • Game Mode Start: Immediately
  • Hero Limit: Off
  • }
  • }
  • heroes
  • {
  • General
  • {
  • Genji
  • {
  • Damage Dealt: 10%
  • Damage Received: 10%
  • Deflect Cooldown Time: 10%
  • No Ammunition Requirement: On
  • Primary Fire: Off
  • Secondary Fire: Off
  • Swift Strike: Off
  • Ultimate Generation - Combat Dragonblade: 0%
  • Ultimate Generation - Passive Dragonblade: 0%
  • Ultimate Generation Dragonblade: 10%
  • }
  • Lúcio
  • {
  • Amp It Up: Off
  • Crossfade: Off
  • Damage Dealt: 10%
  • Damage Received: 10%
  • Jump Vertical Speed: 150%
  • No Ammunition Requirement: On
  • Primary Fire: Off
  • Soundwave Cooldown Time: 25%
  • Soundwave Knockback Scalar: 0%
  • Ultimate Generation - Combat Sound Barrier: 0%
  • Ultimate Generation - Passive Sound Barrier: 0%
  • Ultimate Generation Sound Barrier: 10%
  • }
  • enabled heroes
  • {
  • Genji
  • Lúcio
  • }
  • }
  • }
  • }
  • variables
  • {
  • global:
  • 0: Player1PlayArea
  • 1: Player2PlayArea
  • 2: PlayAreaRadius
  • 3: WallOffset
  • 4: CeilingHeight
  • 5: BallRadius
  • 7: Ball1IsMoving
  • 8: Ball2IsMoving
  • 9: Ball1Position
  • 10: Ball2Position
  • 11: Ball1DirectionTowards
  • 12: Ball2DirectionTowards
  • 13: Ball1Speed
  • 14: Ball2Speed
  • 15: GameHasStarted
  • 16: Player1Score
  • 17: Player2Score
  • 18: MaxScore
  • 19: BackboardPlayer1Position
  • 20: BackboardPlayer2Position
  • 21: BackboardRadius
  • 23: BeamBoxZDivider
  • 24: BeamBoxStep
  • 25: BeamBoxLoop
  • 26: Ball1SpeedModifier
  • 27: Ball2SpeedModifier
  • 28: Ball1IsVisible
  • 29: Ball2IsVisible
  • 30: ReadyUpArea
  • 31: Countdown
  • 32: TutorialArea
  • 33: ChangeHeroArea
  • 34: ShieldRadius
  • 35: AdvancedArea
  • 36: AdvancedMode
  • 37: TutorialActive
  • player:
  • 1: BallHitbox
  • 2: IsHoldingBall
  • 3: HasShieldAvailable
  • 4: IsUsingShield
  • }
  • subroutines
  • {
  • 0: CreateBeamBoxDivider
  • 1: Ball1ChangeDirectionEffects
  • 2: CreatePlayer1BoxDivider
  • 3: CreatePlayer2BoxDivider
  • 4: Ball2ChangeDirectionEffects
  • 5: Ball1Respawn
  • 6: Ball2Respawn
  • 7: BallHitAPlayer
  • 8: PlayerMightTalkWhenThrowing
  • 9: ShieldExplodesEffects
  • }
  • rule("Initialise")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.GameHasStarted = False;
  • Global.Countdown = False;
  • Global.AdvancedMode = False;
  • Wait(5, Ignore Condition);
  • Set Objective Description(All Players(All Teams), Custom String("First to {0}", Global.MaxScore), Visible To and String);
  • }
  • }
  • rule("Initialise player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.IsHoldingBall = False;
  • Event Player.HasShieldAvailable = False;
  • Teleport(Event Player, Vector(16, 0, 0));
  • Wait(0.250, Ignore Condition);
  • Set Facing(Event Player, Direction Towards(Position Of(Event Player), Vector(0, 0, 0)), To World);
  • Set Status(Event Player, Null, Phased Out, 9999);
  • }
  • }
  • rule("In-world text")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Custom String("Sparc"), Vector(-16, 16, 0), 5,
  • Clip Against Surfaces, Visible To Position and String, Orange, Default Visibility);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Custom String("Workshop.codes/sparc"), Vector(-16, 15, 0), 2,
  • Clip Against Surfaces, Visible To Position and String, Aqua, Default Visibility);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Custom String("Made by Mitsiee"), Vector(-16, 14, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • Create In-World Text(Filtered Array(All Players(All Teams), Global.Countdown), Global.Countdown, Up, 5, Clip Against Surfaces,
  • Visible To Position and String, White, Default Visibility);
  • }
  • }
  • disabled rule("--- Pre-game")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Push down game interface in pre-game")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Push down game interface"
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), !Global.GameHasStarted), Null, Custom String(" "), Custom String(" "), Top,
  • 0, White, White, White, Visible To and String, Default Visibility);
  • }
  • }
  • rule("Game is in hero select")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == True;
  • }
  • actions
  • {
  • Set Match Time(1);
  • }
  • }
  • rule("Players cannot leave pre-game area")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.GameHasStarted != True;
  • Has Spawned(Event Player) == True;
  • X Component Of(Position Of(Event Player)) < Global.WallOffset + 1;
  • Slot Of(Event Player) == 0;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Vector(16, Y Component Of(Position Of(Event Player)),
  • Z Component Of(Position Of(Event Player)))), 5, To World, Cancel Contrary Motion);
  • Wait(0.025, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Ready up area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.ReadyUpArea = Vector(8, 0, 4);
  • Create Effect(Filtered Array(!Global.GameHasStarted, True), Ring, Lime Green, Global.ReadyUpArea, 2,
  • Visible To Position and Radius);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Custom String("All players crouch here to ready up"),
  • Global.ReadyUpArea + Vector(0, 0.500, 0), 1.100, Clip Against Surfaces, Visible To Position and String, Lime Green,
  • Default Visibility);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Icon String(Checkmark), Global.ReadyUpArea + Up, 1.100,
  • Clip Against Surfaces, Visible To Position and String, Lime Green, Default Visibility);
  • }
  • }
  • rule("Player is crouching in ready up area")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.GameHasStarted != True;
  • Is Crouching(Event Player) == True;
  • Distance Between(Position Of(Event Player), Global.ReadyUpArea) < 2.500;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Turquoise, Event Player, 2);
  • Play Effect(All Players(All Teams), Buff Impact Sound, White, Event Player, 100);
  • Communicate(Event Player, Ready);
  • }
  • }
  • rule("All players are crouching in ready area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.GameHasStarted != True;
  • Is True For All(All Living Players(All Teams), Is Button Held(Current Array Element, Crouch)) == True;
  • Is True For All(All Players(All Teams), Distance Between(Position Of(Current Array Element), Global.ReadyUpArea) < 2.500) == True;
  • Count Of(All Living Players(All Teams)) > 0;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Clear Status(All Players(All Teams), Phased Out);
  • Global.GameHasStarted = True;
  • Global.Ball1IsVisible = False;
  • Global.Ball2IsVisible = False;
  • Global.Ball1Position = Vector(0, -5, 0);
  • Global.Ball2Position = Vector(0, -5, 0);
  • Wait(1, Ignore Condition);
  • Communicate(All Players(All Teams), Countdown);
  • Global.Countdown = 3;
  • Play Effect(All Players(All Teams), Debuff Impact Sound, White, Vector(0, 0, 0), 100);
  • Wait(1, Ignore Condition);
  • Global.Countdown = 2;
  • Play Effect(All Players(All Teams), Debuff Impact Sound, White, Vector(0, 0, 0), 100);
  • Wait(1, Ignore Condition);
  • Global.Countdown = 1;
  • Play Effect(All Players(All Teams), Debuff Impact Sound, White, Vector(0, 0, 0), 100);
  • Wait(1, Ignore Condition);
  • Global.Countdown = 0;
  • Play Effect(All Players(All Teams), Ring Explosion Sound, White, Vector(0, 0, 0), 200);
  • Play Effect(All Players(All Teams), Ring Explosion, White, Vector(0, 0, 0), 40);
  • Communicate(All Players(All Teams), Go);
  • Set Match Time(180);
  • }
  • }
  • rule("Change hero area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.ChangeHeroArea = Vector(8, 0, 0);
  • Create Effect(Filtered Array(!Global.GameHasStarted, True), Ring, Purple, Global.ChangeHeroArea, 1,
  • Visible To Position and Radius);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Custom String("Crouch here to change hero"),
  • Global.ChangeHeroArea + Vector(0, 0.250, 0), 1.100, Clip Against Surfaces, Visible To Position and String, Purple,
  • Default Visibility);
  • }
  • }
  • rule("Player is crouching in change hero area")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.GameHasStarted != True;
  • Is Crouching(Event Player) == True;
  • Distance Between(Position Of(Event Player), Global.ChangeHeroArea) < 1.500;
  • }
  • 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("Game started - ball 1")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Countdown == 1;
  • Global.GameHasStarted == True;
  • }
  • actions
  • {
  • Call Subroutine(Ball1Respawn);
  • }
  • }
  • rule("Game started - ball 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Countdown == 1;
  • Global.GameHasStarted == True;
  • }
  • actions
  • {
  • Call Subroutine(Ball2Respawn);
  • }
  • }
  • disabled rule("--- Player area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Set Play Area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Player1PlayArea = Vector(0, 0, 12);
  • Global.Player2PlayArea = Vector(0, 0, -12);
  • Global.PlayAreaRadius = 3.750;
  • Global.WallOffset = 4;
  • Global.CeilingHeight = 6;
  • Global.BeamBoxStep = 1;
  • }
  • }
  • rule("Create Play Area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Rings player 1"
  • Create Effect(All Players(All Teams), Ring, Aqua, Global.Player1PlayArea, Global.PlayAreaRadius, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Ring, Aqua, Global.Player1PlayArea, Global.PlayAreaRadius / 2.500,
  • Visible To Position and Radius);
  • "Rings player 2"
  • Create Effect(All Players(All Teams), Ring, Orange, Global.Player2PlayArea, Global.PlayAreaRadius, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Ring, Orange, Global.Player2PlayArea, Global.PlayAreaRadius / 2.500,
  • Visible To Position and Radius);
  • "Player 1 effect on floor"
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset, 0, 20), Vector(Global.WallOffset, 0, 0), Aqua,
  • Visible To Position and Radius);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, 0, 20), Vector(Global.WallOffset * -1, 0, 0),
  • Aqua, Visible To Position and Radius);
  • "Player 2 effect on floor"
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset, 0, -20), Vector(Global.WallOffset, 0, 0), Orange,
  • Visible To Position and Radius);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, 0, -20), Vector(Global.WallOffset * -1, 0, 0),
  • Orange, Visible To Position and Radius);
  • "Player 1 effect top of box"
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset, Global.CeilingHeight, 20), Vector(
  • Global.WallOffset, Global.CeilingHeight, 0), Aqua, Visible To Position and Radius);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, Global.CeilingHeight, 20), Vector(
  • Global.WallOffset * -1, Global.CeilingHeight, 0), Aqua, Visible To Position and Radius);
  • "Player 2 effect top of box"
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset, Global.CeilingHeight, -20), Vector(
  • Global.WallOffset, Global.CeilingHeight, 0), Orange, Visible To Position and Radius);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, Global.CeilingHeight, -20), Vector(
  • Global.WallOffset * -1, Global.CeilingHeight, 0), Orange, Visible To Position and Radius);
  • }
  • }
  • rule("Create Play Area limits box")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Team 1 backing beams"
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset, 0, 19.980), Vector(Global.WallOffset,
  • Global.CeilingHeight, 19.981), Aqua, None);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, 0, 19.980), Vector(Global.WallOffset * -1,
  • Global.CeilingHeight, 19.981), Aqua, None);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, 0, 19.880), Vector(Global.WallOffset, 0,
  • 19.881), Aqua, None);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, Global.CeilingHeight, 19.980), Vector(
  • Global.WallOffset, Global.CeilingHeight, 19.981), Aqua, None);
  • }
  • }
  • rule("Create grapple beam box")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Beam box on top"
  • For Global Variable(BeamBoxLoop, 0, Global.WallOffset * 2 + Global.BeamBoxStep, Global.BeamBoxStep);
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(Global.WallOffset * -1 + Global.BeamBoxLoop, Global.CeilingHeight,
  • 20), Vector(Global.WallOffset * -1 + Global.BeamBoxLoop, Global.CeilingHeight, -20), White, None);
  • End;
  • "Beam box positive x"
  • For Global Variable(BeamBoxLoop, 0, Global.CeilingHeight + Global.BeamBoxStep, Global.BeamBoxStep);
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(Global.WallOffset, Global.CeilingHeight - Global.BeamBoxLoop, 20),
  • Vector(Global.WallOffset, Global.CeilingHeight - Global.BeamBoxLoop, -20), White, None);
  • End;
  • "Beam box negative x"
  • For Global Variable(BeamBoxLoop, 0, Global.CeilingHeight + Global.BeamBoxStep, Global.BeamBoxStep);
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(Global.WallOffset * -1, Global.CeilingHeight - Global.BeamBoxLoop,
  • 20), Vector(Global.WallOffset * -1, Global.CeilingHeight - Global.BeamBoxLoop, -20), White, None);
  • End;
  • "Create grapple beam dividers"
  • Global.BeamBoxZDivider = 0;
  • Call Subroutine(CreateBeamBoxDivider);
  • Global.BeamBoxZDivider = 8;
  • Call Subroutine(CreateBeamBoxDivider);
  • Call Subroutine(CreatePlayer1BoxDivider);
  • Global.BeamBoxZDivider = -8;
  • Call Subroutine(CreateBeamBoxDivider);
  • Call Subroutine(CreatePlayer2BoxDivider);
  • Global.BeamBoxZDivider = 16;
  • Call Subroutine(CreateBeamBoxDivider);
  • Call Subroutine(CreatePlayer1BoxDivider);
  • Global.BeamBoxZDivider = -16;
  • Call Subroutine(CreateBeamBoxDivider);
  • Call Subroutine(CreatePlayer2BoxDivider);
  • Global.BeamBoxZDivider = 19.980;
  • Call Subroutine(CreateBeamBoxDivider);
  • Call Subroutine(CreatePlayer1BoxDivider);
  • Global.BeamBoxZDivider = -19.980;
  • Call Subroutine(CreateBeamBoxDivider);
  • Call Subroutine(CreatePlayer2BoxDivider);
  • }
  • }
  • rule("Subroutine - Create beam box divider")
  • {
  • event
  • {
  • Subroutine;
  • CreateBeamBoxDivider;
  • }
  • actions
  • {
  • "Center divider"
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(Global.WallOffset, 0, Global.BeamBoxZDivider), Vector(
  • Global.WallOffset, Global.CeilingHeight, Global.Player1PlayArea + Global.BeamBoxZDivider + 0.001), White, None);
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(Global.WallOffset * -1, 0, Global.BeamBoxZDivider), Vector(
  • Global.WallOffset * -1, Global.CeilingHeight, Global.BeamBoxZDivider + 0.001), White, None);
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(Global.WallOffset * -1, 0, Global.BeamBoxZDivider), Vector(
  • Global.WallOffset, 0, Global.BeamBoxZDivider + 0.001), White, None);
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(Global.WallOffset * -1, Global.CeilingHeight,
  • Global.BeamBoxZDivider), Vector(Global.WallOffset, Global.CeilingHeight, Global.BeamBoxZDivider + 0.001), White, None);
  • }
  • }
  • rule("Subroutine - Create Player 1 beam box divider")
  • {
  • event
  • {
  • Subroutine;
  • CreatePlayer1BoxDivider;
  • }
  • actions
  • {
  • "Center divider"
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset, 0, Global.BeamBoxZDivider), Vector(
  • Global.WallOffset, Global.CeilingHeight, Global.Player1PlayArea + Global.BeamBoxZDivider + 0.001), Aqua, None);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, 0, Global.BeamBoxZDivider), Vector(
  • Global.WallOffset * -1, Global.CeilingHeight, Global.BeamBoxZDivider + 0.001), Aqua, None);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, 0, Global.BeamBoxZDivider), Vector(
  • Global.WallOffset, 0, Global.BeamBoxZDivider + 0.001), Aqua, None);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, Global.CeilingHeight, Global.BeamBoxZDivider),
  • Vector(Global.WallOffset, Global.CeilingHeight, Global.BeamBoxZDivider + 0.001), Aqua, None);
  • }
  • }
  • rule("Subroutine - Create Player 2 beam box divider")
  • {
  • event
  • {
  • Subroutine;
  • CreatePlayer2BoxDivider;
  • }
  • actions
  • {
  • "Center divider"
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset, 0, Global.BeamBoxZDivider), Vector(
  • Global.WallOffset, Global.CeilingHeight, Global.Player1PlayArea + Global.BeamBoxZDivider + 0.001), Orange, None);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, 0, Global.BeamBoxZDivider), Vector(
  • Global.WallOffset * -1, Global.CeilingHeight, Global.BeamBoxZDivider + 0.001), Orange, None);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, 0, Global.BeamBoxZDivider), Vector(
  • Global.WallOffset, 0, Global.BeamBoxZDivider + 0.001), Orange, None);
  • Create Beam Effect(All Players(All Teams), Good Beam, Vector(Global.WallOffset * -1, Global.CeilingHeight, Global.BeamBoxZDivider),
  • Vector(Global.WallOffset, Global.CeilingHeight, Global.BeamBoxZDivider + 0.001), Orange, None);
  • }
  • }
  • rule("Player 1 cannot leave play area")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Slot 0;
  • }
  • conditions
  • {
  • (X Component Of(Position Of(Event Player)) > X Component Of(Global.Player1PlayArea) + Global.PlayAreaRadius || X Component Of(
  • Position Of(Event Player)) < X Component Of(Global.Player1PlayArea) - Global.PlayAreaRadius || Z Component Of(Position Of(
  • Event Player)) > Z Component Of(Global.Player1PlayArea) + Global.PlayAreaRadius || Z Component Of(Position Of(Event Player))
  • < Z Component Of(Global.Player1PlayArea) - Global.PlayAreaRadius) == True;
  • Has Spawned(Event Player) == True;
  • Global.GameHasStarted == True;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Global.Player1PlayArea + Vector(0, Y Component Of(
  • Position Of(Event Player)) - 1, 0)), 7.500, To World, Cancel Contrary Motion);
  • Set Move Speed(Event Player, 0);
  • Wait(0.025, Ignore Condition);
  • Set Move Speed(Event Player, 100);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Player 2 cannot leave play area")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Slot 0;
  • }
  • conditions
  • {
  • (X Component Of(Position Of(Event Player)) > X Component Of(Global.Player2PlayArea) + Global.PlayAreaRadius || X Component Of(
  • Position Of(Event Player)) < X Component Of(Global.Player2PlayArea) - Global.PlayAreaRadius || Z Component Of(Position Of(
  • Event Player)) > Z Component Of(Global.Player2PlayArea) + Global.PlayAreaRadius || Z Component Of(Position Of(Event Player))
  • < Z Component Of(Global.Player2PlayArea) - Global.PlayAreaRadius) == True;
  • Has Spawned(Event Player) == True;
  • Global.GameHasStarted == True;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Direction Towards(Position Of(Event Player), Global.Player2PlayArea + Vector(0, Y Component Of(
  • Position Of(Event Player)) - 1, 0)), 7.500, To World, Cancel Contrary Motion);
  • Set Move Speed(Event Player, 0);
  • Wait(0.025, Ignore Condition);
  • Set Move Speed(Event Player, 100);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("--- Initialse players")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Teleport player 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Slot 0;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.GameHasStarted == True;
  • }
  • actions
  • {
  • Teleport(Event Player, Global.Player1PlayArea + Forward);
  • Set Facing(Event Player, Global.Player2PlayArea, To World);
  • }
  • }
  • rule("Teleport player 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Slot 0;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Global.GameHasStarted == True;
  • }
  • actions
  • {
  • Teleport(Event Player, Global.Player2PlayArea + Backward);
  • Set Facing(Event Player, Global.Player1PlayArea, To World);
  • }
  • }
  • disabled rule("--- Ball")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Initialise balls")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.BallRadius = 0.500;
  • Global.Ball1Position = Global.Player1PlayArea + Up;
  • Global.Ball2Position = Global.Player2PlayArea + Up;
  • Global.Ball1Speed = 0.150;
  • Global.Ball2Speed = 0.150;
  • Global.Ball1Speed = 0.200;
  • Global.Ball2Speed = 0.200;
  • Global.Ball1SpeedModifier = 0;
  • Global.Ball2SpeedModifier = 0;
  • Global.Ball1IsVisible = True;
  • Global.Ball2IsVisible = True;
  • Wait(0.250, Ignore Condition);
  • }
  • }
  • rule("Set ball hitbox for Lucio")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Lúcio);
  • }
  • actions
  • {
  • Event Player.BallHitbox = 3;
  • }
  • }
  • rule("Set ball hitbox for Genji")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Genji);
  • }
  • actions
  • {
  • Event Player.BallHitbox = 2;
  • }
  • }
  • rule("Create ball effects")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Slot 0;
  • }
  • actions
  • {
  • "Ball 1"
  • Create Effect(Filtered Array(Event Player, Global.Ball1IsVisible), Sphere, Aqua, Global.Ball1Position, Global.BallRadius,
  • Visible To Position and Radius);
  • Create Effect(Event Player, Bad Aura, Aqua, Global.Ball1Position, Global.BallRadius, Visible To Position and Radius);
  • Create Effect(Event Player, Pick-up Sound, White, Global.Ball1Position, 250 - Distance Between(Event Player, Global.Ball1Position)
  • * 8, Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Y Component Of(Global.Ball1Position)
  • > 0 && !Global.Ball1IsMoving), Light Shaft, Aqua, Global.Ball1Position + Vector(0, -5, 0), 0.150,
  • Visible To Position and Radius);
  • "Ball 2"
  • Create Effect(Filtered Array(Event Player, Global.Ball2IsVisible), Sphere, Orange, Global.Ball2Position, Global.BallRadius,
  • Visible To Position and Radius);
  • Create Effect(Event Player, Bad Aura, Orange, Global.Ball2Position, Global.BallRadius, Visible To Position and Radius);
  • Create Effect(Event Player, Pick-up Sound, White, Global.Ball2Position, 250 - Distance Between(Event Player, Global.Ball2Position)
  • * 8, Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Y Component Of(Global.Ball2Position)
  • > 0 && !Global.Ball2IsMoving), Light Shaft, Orange, Global.Ball2Position + Vector(0, -5, 0), 0.150,
  • Visible To Position and Radius);
  • }
  • }
  • rule("Move ball 1")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Ball1IsMoving == True;
  • }
  • actions
  • {
  • Global.Ball1Position = Global.Ball1Position + Vector(Global.Ball1DirectionTowards[0], Global.Ball1DirectionTowards[1],
  • Global.Ball1DirectionTowards[2]) * (Global.Ball1Speed + Global.Ball1SpeedModifier * (Global.Ball1Speed / 3));
  • Global.Ball1DirectionTowards[2]) * (Global.Ball1Speed + Global.Ball1SpeedModifier * (Global.Ball1Speed / 5));
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Move ball 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Ball2IsMoving == True;
  • }
  • actions
  • {
  • Global.Ball2Position = Global.Ball2Position + Vector(Global.Ball2DirectionTowards[0], Global.Ball2DirectionTowards[1],
  • Global.Ball2DirectionTowards[2]) * (Global.Ball2Speed + Global.Ball2SpeedModifier * (Global.Ball2Speed / 3));
  • Global.Ball2DirectionTowards[2]) * (Global.Ball2Speed + Global.Ball2SpeedModifier * (Global.Ball2Speed / 5));
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Ball 1 has hit X wall")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (X Component Of(Global.Ball1Position) + Global.BallRadius >= Global.WallOffset || X Component Of(Global.Ball1Position)
  • - Global.BallRadius <= Global.WallOffset * -1) == True;
  • }
  • actions
  • {
  • If(Global.Ball1DirectionTowards[0] < 0);
  • Global.Ball1DirectionTowards[0] = Absolute Value(Global.Ball1DirectionTowards[0]);
  • Else;
  • Global.Ball1DirectionTowards[0] = Absolute Value(Global.Ball1DirectionTowards[0]) * -1;
  • End;
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • }
  • }
  • rule("Ball 1 has hit Y wall")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Y Component Of(Global.Ball1Position) + Global.BallRadius >= Global.CeilingHeight || Y Component Of(Global.Ball1Position)
  • - Global.BallRadius <= 0) == True;
  • Global.Ball1IsMoving == True;
  • }
  • actions
  • {
  • If(Global.Ball1DirectionTowards[1] < 0);
  • Global.Ball1DirectionTowards[1] = Absolute Value(Global.Ball1DirectionTowards[1]);
  • Else;
  • Global.Ball1DirectionTowards[1] = Absolute Value(Global.Ball1DirectionTowards[1]) * -1;
  • End;
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • }
  • }
  • rule("Ball 1 has hit opposit Z wall")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Z Component Of(Global.Ball1Position) - Global.BallRadius <= -20;
  • }
  • actions
  • {
  • Global.Ball1DirectionTowards[0] = X Component Of(Direction Towards(Global.Ball1Position, Global.Player1PlayArea));
  • Global.Ball1DirectionTowards[1] = Y Component Of(Direction Towards(Global.Ball1Position, Global.Player1PlayArea + Up));
  • Global.Ball1DirectionTowards[2] = Z Component Of(Direction Towards(Global.Ball1Position, Global.Player1PlayArea));
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • Global.Ball1IsVisible = False;
  • Play Effect(All Players(All Teams), Good Pickup Effect, Aqua, Global.Ball1Position, 2);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.Ball1Position, 5);
  • Wait(0.250, Ignore Condition);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.Ball1Position, 5);
  • Wait(0.250, Ignore Condition);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.Ball1Position, 5);
  • }
  • }
  • rule("Ball 1 has hit current Z wall")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Z Component Of(Global.Ball1Position) + Global.BallRadius >= 20;
  • }
  • actions
  • {
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • Call Subroutine(Ball1Respawn);
  • }
  • }
  • rule("Ball 1 is moving back and crosses threshhold")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Z Component Of(Global.Ball1Position) > -8;
  • Global.Ball1IsVisible != True;
  • Global.Ball1IsMoving == True;
  • Global.Ball1DirectionTowards[2] > 0;
  • }
  • actions
  • {
  • Global.Ball1IsVisible = True;
  • }
  • }
  • rule("Ball 2 has hit X wall")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (X Component Of(Global.Ball2Position) + Global.BallRadius >= Global.WallOffset || X Component Of(Global.Ball2Position)
  • - Global.BallRadius <= Global.WallOffset * -1) == True;
  • }
  • actions
  • {
  • If(Global.Ball2DirectionTowards[0] < 0);
  • Global.Ball2DirectionTowards[0] = Absolute Value(Global.Ball2DirectionTowards[0]);
  • Else;
  • Global.Ball2DirectionTowards[0] = Absolute Value(Global.Ball2DirectionTowards[0]) * -1;
  • End;
  • Call Subroutine(Ball2ChangeDirectionEffects);
  • }
  • }
  • rule("Ball 2 has hit Y wall")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Y Component Of(Global.Ball2Position) + Global.BallRadius >= Global.CeilingHeight || Y Component Of(Global.Ball2Position)
  • - Global.BallRadius <= 0) == True;
  • Global.Ball2IsMoving == True;
  • }
  • actions
  • {
  • If(Global.Ball2DirectionTowards[1] < 0);
  • Global.Ball2DirectionTowards[1] = Absolute Value(Global.Ball2DirectionTowards[1]);
  • Else;
  • Global.Ball2DirectionTowards[1] = Absolute Value(Global.Ball2DirectionTowards[1]) * -1;
  • End;
  • Call Subroutine(Ball2ChangeDirectionEffects);
  • }
  • }
  • rule("Ball 2 has hit opposit Z wall")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Z Component Of(Global.Ball2Position) + Global.BallRadius >= 20;
  • }
  • actions
  • {
  • Global.Ball2DirectionTowards[0] = X Component Of(Direction Towards(Global.Ball2Position, Global.Player1PlayArea));
  • Global.Ball2DirectionTowards[1] = Y Component Of(Direction Towards(Global.Ball2Position, Global.Player1PlayArea + Up));
  • Global.Ball2DirectionTowards[2] = Z Component Of(Direction Towards(Global.Ball2Position, Global.Player1PlayArea));
  • Global.Ball2DirectionTowards[0] = X Component Of(Direction Towards(Global.Ball2Position, Global.Player2PlayArea));
  • Global.Ball2DirectionTowards[1] = Y Component Of(Direction Towards(Global.Ball2Position, Global.Player2PlayArea + Up));
  • Global.Ball2DirectionTowards[2] = Z Component Of(Direction Towards(Global.Ball2Position, Global.Player2PlayArea));
  • Call Subroutine(Ball2ChangeDirectionEffects);
  • Global.Ball2IsVisible = False;
  • Play Effect(All Players(All Teams), Good Pickup Effect, Aqua, Global.Ball2Position, 2);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.Ball2Position, 5);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Orange, Global.Ball2Position, 2);
  • Play Effect(All Players(All Teams), Ring Explosion, Orange, Global.Ball2Position, 5);
  • Wait(0.250, Ignore Condition);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.Ball2Position, 5);
  • Play Effect(All Players(All Teams), Ring Explosion, Orange, Global.Ball2Position, 5);
  • Wait(0.250, Ignore Condition);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.Ball2Position, 5);
  • Play Effect(All Players(All Teams), Ring Explosion, Orange, Global.Ball2Position, 5);
  • }
  • }
  • rule("Ball 2 has hit current Z wall")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Z Component Of(Global.Ball2Position) - Global.BallRadius <= -20;
  • }
  • actions
  • {
  • Call Subroutine(Ball2ChangeDirectionEffects);
  • Call Subroutine(Ball2Respawn);
  • }
  • }
  • rule("Ball 2 is moving back and crosses threshhold")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Z Component Of(Global.Ball2Position) < 8;
  • Global.Ball2IsVisible != True;
  • Global.Ball2IsMoving == True;
  • Global.Ball2DirectionTowards[2] > 0;
  • Global.Ball2DirectionTowards[2] < 0;
  • }
  • actions
  • {
  • Global.Ball2IsVisible = True;
  • }
  • }
  • rule("Subroutine - Ball effects when ball 1 changes direction")
  • {
  • event
  • {
  • Subroutine;
  • Ball1ChangeDirectionEffects;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Bad Explosion, Aqua, Global.Ball1Position, Global.BallRadius * 1.500);
  • Play Effect(All Players(All Teams), Explosion Sound, White, Global.Ball1Position, 50 - Distance Between(Position Of(Event Player),
  • Global.Ball1Position) * 2);
  • }
  • }
  • rule("Subroutine - Ball effects when ball 2 changes direction")
  • {
  • event
  • {
  • Subroutine;
  • Ball2ChangeDirectionEffects;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Bad Explosion, Orange, Global.Ball2Position, Global.BallRadius * 1.500);
  • Play Effect(All Players(All Teams), Explosion Sound, White, Global.Ball2Position, 50 - Distance Between(Position Of(Event Player),
  • Global.Ball2Position) * 2);
  • }
  • }
  • rule("Subroutine - (Re)spawn ball 1")
  • {
  • event
  • {
  • Subroutine;
  • Ball1Respawn;
  • }
  • actions
  • {
  • Global.Ball1IsMoving = False;
  • Global.Ball1IsVisible = False;
  • Play Effect(All Players(All Teams), Good Pickup Effect, Aqua, Global.Ball1Position, 2);
  • Wait(0.500, Ignore Condition);
  • Global.Ball1Position = Global.Player1PlayArea;
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.Ball1Position, 2.500);
  • Wait(0.250, Ignore Condition);
  • Global.Ball1Position = Global.Player1PlayArea + Vector(0, 0.500, 0);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.Ball1Position, 2.500);
  • Wait(0.250, Ignore Condition);
  • Global.Ball1Position = Global.Player1PlayArea + Vector(0, 1, 0);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.Ball1Position, 2.500);
  • Global.Ball1IsVisible = True;
  • }
  • }
  • rule("Subroutine - (Re)spawn ball 2")
  • {
  • event
  • {
  • Subroutine;
  • Ball2Respawn;
  • }
  • actions
  • {
  • Global.Ball2IsMoving = False;
  • Global.Ball2IsVisible = False;
  • Play Effect(All Players(All Teams), Good Pickup Effect, Orange, Global.Ball2Position, 2);
  • Wait(0.500, Ignore Condition);
  • Global.Ball2Position = Global.Player2PlayArea;
  • Play Effect(All Players(All Teams), Ring Explosion, Orange, Global.Ball2Position, 2.500);
  • Wait(0.250, Ignore Condition);
  • Global.Ball2Position = Global.Player2PlayArea + Vector(0, 0.500, 0);
  • Play Effect(All Players(All Teams), Ring Explosion, Orange, Global.Ball2Position, 2.500);
  • Wait(0.250, Ignore Condition);
  • Global.Ball2Position = Global.Player2PlayArea + Vector(0, 1, 0);
  • Play Effect(All Players(All Teams), Ring Explosion, Orange, Global.Ball2Position, 2.500);
  • Global.Ball2IsVisible = True;
  • }
  • }
  • rule("Subroutine - Ball hit a player effects")
  • {
  • event
  • {
  • Subroutine;
  • BallHitAPlayer;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Knocked Down, 0.500);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, White, Event Player, 200);
  • Play Effect(All Players(All Teams), Bad Explosion, Red, Event Player, 5);
  • Play Effect(All Players(All Teams), Bad Pickup Effect, Red, Event Player, 20);
  • Play Effect(All Players(All Teams), Ring Explosion, Red, Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(
  • Position Of(Event Player))), 20);
  • }
  • }
  • rule("Ball 1 hit player 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Slot 0;
  • }
  • conditions
  • {
  • Distance Between(Eye Position(Event Player) + Vector(0, -0.500, 0), Global.Ball1Position) <= Global.BallRadius * 2.500;
  • ((Hero Of(Event Player) == Hero(Lúcio) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) == Hero(Genji)
  • && Is Using Ability 2(Event Player) && Is In View Angle(Event Player, Global.Ball1Position, 60))) != True;
  • Global.Ball1IsMoving == True;
  • Global.Ball1IsVisible == True;
  • Event Player.IsHoldingBall != True;
  • Event Player.IsUsingShield != True;
  • }
  • actions
  • {
  • Global.Ball1Position = Vector(0, -5, 0);
  • Big Message(All Players(All Teams), Custom String("{0} got hit", Players In Slot(0, Team 1)));
  • Global.Player2Score += 1;
  • Set Team Score(Team 2, Global.Player2Score);
  • Global.Ball1SpeedModifier = 0;
  • Call Subroutine(BallHitAPlayer);
  • Global.Ball1IsVisible = False;
  • Global.Ball1IsMoving = False;
  • Wait(1, Ignore Condition);
  • Call Subroutine(Ball1Respawn);
  • }
  • }
  • rule("Ball 2 hit player 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Slot 0;
  • }
  • conditions
  • {
  • Distance Between(Eye Position(Event Player) + Vector(0, -0.500, 0), Global.Ball2Position) <= Global.BallRadius * 2.500;
  • ((Hero Of(Event Player) == Hero(Lúcio) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) == Hero(Genji)
  • && Is Using Ability 2(Event Player) && Is In View Angle(Event Player, Global.Ball1Position, 60))) != True;
  • Global.Ball2IsMoving == True;
  • Global.Ball2IsVisible == True;
  • Event Player.IsUsingShield != True;
  • }
  • actions
  • {
  • Global.Ball2Position = Vector(0, -5, 0);
  • Big Message(All Players(All Teams), Custom String("{0} got hit", Players In Slot(0, Team 1)));
  • Global.Player2Score += 1;
  • Set Team Score(Team 2, Global.Player2Score);
  • Global.Ball2SpeedModifier = 0;
  • Call Subroutine(BallHitAPlayer);
  • Global.Ball2IsVisible = False;
  • Global.Ball2IsMoving = False;
  • Wait(1, Ignore Condition);
  • Call Subroutine(Ball2Respawn);
  • }
  • }
  • rule("Ball 1 hit player 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Slot 0;
  • }
  • conditions
  • {
  • Distance Between(Eye Position(Event Player) + Vector(0, -0.500, 0), Global.Ball1Position) <= Global.BallRadius * 2.500;
  • ((Hero Of(Event Player) == Hero(Lúcio) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) == Hero(Genji)
  • && Is Using Ability 2(Event Player) && Is In View Angle(Event Player, Global.Ball1Position, 60))) != True;
  • Global.Ball1IsMoving == True;
  • Global.Ball1IsVisible == True;
  • Event Player.IsUsingShield != True;
  • }
  • actions
  • {
  • Global.Ball1Position = Vector(0, -5, 0);
  • Big Message(All Players(All Teams), Custom String("{0} got hit", Players In Slot(0, Team 2)));
  • Global.Player1Score += 1;
  • Set Team Score(Team 1, Global.Player1Score);
  • Global.Ball1SpeedModifier = 0;
  • Call Subroutine(BallHitAPlayer);
  • Global.Ball1IsVisible = False;
  • Global.Ball1IsMoving = False;
  • Wait(1, Ignore Condition);
  • Call Subroutine(Ball1Respawn);
  • }
  • }
  • rule("Ball 2 hit player 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Slot 0;
  • }
  • conditions
  • {
  • Distance Between(Eye Position(Event Player) + Vector(0, -0.500, 0), Global.Ball2Position) <= Global.BallRadius * 2.500;
  • ((Hero Of(Event Player) == Hero(Lúcio) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) == Hero(Genji)
  • && Is Using Ability 2(Event Player) && Is In View Angle(Event Player, Global.Ball1Position, 60))) != True;
  • Global.Ball2IsMoving == True;
  • Global.Ball2IsVisible == True;
  • Event Player.IsHoldingBall != True;
  • Event Player.IsUsingShield != True;
  • }
  • actions
  • {
  • Global.Ball2Position = Vector(0, -5, 0);
  • Big Message(All Players(All Teams), Custom String("{0} got hit", Players In Slot(0, Team 2)));
  • Global.Player1Score += 1;
  • Set Team Score(Team 1, Global.Player1Score);
  • Global.Ball2SpeedModifier = 0;
  • Call Subroutine(BallHitAPlayer);
  • Global.Ball2IsVisible = False;
  • Global.Ball2IsMoving = False;
  • Wait(1, Ignore Condition);
  • Call Subroutine(Ball2Respawn);
  • }
  • }
  • disabled rule("--- Using deflect")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Player is using ability and ball 1 is near user")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • ((Hero Of(Event Player) == Hero(Lúcio) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) == Hero(Genji)
  • && Is Using Ability 2(Event Player))) == True;
  • Distance Between(Position Of(Event Player), Global.Ball1Position) <= Event Player.BallHitbox;
  • Is In View Angle(Event Player, Global.Ball1Position, 60) == True;
  • Global.Ball1IsVisible == True;
  • }
  • actions
  • {
  • Global.Ball1IsMoving = True;
  • Global.Ball1DirectionTowards[0] = Min(Max(X Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • Global.Ball1DirectionTowards[1] = Min(Max(Y Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • If(Z Component Of(Facing Direction Of(Event Player)) >= 0);
  • Global.Ball1DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), 0.250), 1);
  • Else;
  • Global.Ball1DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), -1), -0.250);
  • End;
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Player is using ability and ball 2 is near user")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • ((Hero Of(Event Player) == Hero(Lúcio) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) == Hero(Genji)
  • && Is Using Ability 2(Event Player))) == True;
  • Distance Between(Position Of(Event Player), Global.Ball2Position) <= Event Player.BallHitbox;
  • Is In View Angle(Event Player, Global.Ball2Position, 60) == True;
  • Global.Ball2IsVisible == True;
  • }
  • actions
  • {
  • Global.Ball2IsMoving = True;
  • Global.Ball2DirectionTowards[0] = Min(Max(X Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • Global.Ball2DirectionTowards[1] = Min(Max(Y Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • If(Z Component Of(Facing Direction Of(Event Player)) >= 0);
  • Global.Ball2DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), 0.250), 1);
  • Else;
  • Global.Ball2DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), -1), -0.250);
  • End;
  • Call Subroutine(Ball2ChangeDirectionEffects);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Genji use secondary fire to deflect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Genji);
  • Is Button Held(Event Player, Secondary Fire) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Ability 2);
  • }
  • }
  • disabled rule("--- Score HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Initialise")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.Player1Score = 0;
  • Global.Player2Score = 0;
  • Global.MaxScore = 5;
  • }
  • }
  • rule("In-world text of score")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Score player 1"
  • Create In-World Text(All Players(All Teams), Global.Player1Score, Vector(18, 10, 3), 25, Clip Against Surfaces,
  • Visible To Position and String, Aqua, Default Visibility);
  • "Score player 2"
  • Create In-World Text(All Players(All Teams), Global.Player2Score, Vector(18, 10, -3), 25, Clip Against Surfaces,
  • Visible To Position and String, Orange, Default Visibility);
  • "Score text"
  • Create In-World Text(All Players(All Teams), Custom String("Score"), Vector(18, 10, 0), 2, Clip Against Surfaces,
  • Visible To Position and String, White, Default Visibility);
  • "Max score"
  • Create In-World Text(All Players(All Teams), Custom String("First to {0}", Global.MaxScore), Vector(18, 9, 0), 1,
  • Clip Against Surfaces, Visible To Position and String, White, Default Visibility);
  • "Speed modifier ball 1"
  • Create In-World Text(All Players(All Teams), Custom String("{0} {1}", Icon String(Bolt), Global.Ball1SpeedModifier), Vector(18, 9,
  • 3), 1, Clip Against Surfaces, Visible To Position and String, Aqua, Default Visibility);
  • "Speed modifier ball 1"
  • Create In-World Text(All Players(All Teams), Custom String("{0} {1}", Icon String(Bolt), Global.Ball2SpeedModifier), Vector(18, 9,
  • -3), 1, Clip Against Surfaces, Visible To Position and String, Orange, Default Visibility);
  • }
  • }
  • disabled rule("--- Backboards")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Create backboards")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.BackboardRadius = 1.500;
  • "Backboard player 1"
  • Global.BackboardPlayer1Position = Vector(0, Global.BackboardRadius * 1.250, 20);
  • Create Effect(All Players(All Teams), Sphere, Aqua, Global.BackboardPlayer1Position, Global.BackboardRadius,
  • Visible To Position and Radius);
  • "Backboard player 2"
  • Global.BackboardPlayer2Position = Vector(0, Global.BackboardRadius * 1.250, -20);
  • Create Effect(All Players(All Teams), Sphere, Orange, Global.BackboardPlayer2Position, Global.BackboardRadius,
  • Visible To Position and Radius);
  • }
  • }
  • rule("Ball 1 enters backboard 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Distance Between(Global.Ball1Position, Global.BackboardPlayer2Position) - Global.BallRadius <= Global.BackboardRadius;
  • Global.Ball1IsVisible == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Explosion, Aqua, Global.BackboardPlayer2Position, 3);
  • Play Effect(All Players(All Teams), Ring Explosion, Aqua, Global.BackboardPlayer2Position, 20);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, White, Global.BackboardPlayer2Position, 100);
  • If(Global.Ball1SpeedModifier < 5);
  • Global.Ball1SpeedModifier += 1;
  • End;
  • }
  • }
  • rule("Ball 2 enters backboard 1")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Distance Between(Global.Ball2Position, Global.BackboardPlayer1Position) - Global.BallRadius <= Global.BackboardRadius;
  • Global.Ball2IsVisible == True;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Explosion, Orange, Global.BackboardPlayer1Position, 3);
  • Play Effect(All Players(All Teams), Ring Explosion, Orange, Global.BackboardPlayer1Position, 20);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, White, Global.BackboardPlayer1Position, 100);
  • If(Global.Ball2SpeedModifier < 5);
  • Global.Ball2SpeedModifier += 1;
  • End;
  • }
  • }
  • disabled rule("--- Catching your ball")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Player 1 is using melee near ball 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Slot 0;
  • }
  • conditions
  • {
  • Is Meleeing(Event Player) == True;
  • Distance Between(Position Of(Event Player), Global.Ball1Position) <= 2.500;
  • Is In View Angle(Event Player, Global.Ball1Position, 60) == True;
  • Global.Ball1IsVisible == True;
  • Event Player.IsHoldingBall != True;
  • }
  • actions
  • {
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • Global.Ball1IsVisible = False;
  • Global.Ball1IsMoving = False;
  • Global.Ball1Position = Vector(0, -5, 0);
  • Stop Holding Button(Event Player, Melee);
  • Disallow Button(Event Player, Melee);
  • Wait(0.100, Ignore Condition);
  • Event Player.IsHoldingBall = True;
  • Event Player.HasShieldAvailable = True;
  • }
  • }
  • rule("Player 2 is using melee near ball 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Slot 0;
  • }
  • conditions
  • {
  • Is Meleeing(Event Player) == True;
  • Distance Between(Position Of(Event Player), Global.Ball2Position) <= 2.500;
  • Is In View Angle(Event Player, Global.Ball2Position, 60) == True;
  • Global.Ball2IsVisible == True;
  • Event Player.IsHoldingBall != True;
  • }
  • actions
  • {
  • Call Subroutine(Ball2ChangeDirectionEffects);
  • Global.Ball2Position = False;
  • Global.Ball2IsMoving = False;
  • Global.Ball2Position = Vector(0, -5, 0);
  • Stop Holding Button(Event Player, Melee);
  • Disallow Button(Event Player, Melee);
  • Wait(0.100, Ignore Condition);
  • Event Player.IsHoldingBall = True;
  • Event Player.HasShieldAvailable = True;
  • }
  • }
  • rule("Player 1 Is holding ball and press melee")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Slot 0;
  • }
  • conditions
  • {
  • Event Player.IsHoldingBall == True;
  • Is Meleeing(Event Player) == True;
  • }
  • actions
  • {
  • Global.Ball1IsMoving = True;
  • Global.Ball1IsVisible = True;
  • Event Player.HasShieldAvailable = False;
  • Global.Ball1Position = Eye Position(Event Player) - Vector(0, Global.BallRadius / 2, 0) + Ray Cast Hit Normal(Eye Position(
  • Event Player), Facing Direction Of(Event Player) * 3, All Players(All Teams), Event Player, True);
  • Global.Ball1DirectionTowards[0] = Min(Max(X Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • Global.Ball1DirectionTowards[1] = Min(Max(Y Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • If(Z Component Of(Facing Direction Of(Event Player)) >= 0);
  • Global.Ball1DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), 0.250), 1);
  • Else;
  • Global.Ball1DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), -1), -0.250);
  • End;
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • Call Subroutine(PlayerMightTalkWhenThrowing);
  • Wait(0.500, Ignore Condition);
  • Event Player.IsHoldingBall = False;
  • }
  • }
  • rule("Player 2 Is holding ball and press melee")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Slot 0;
  • }
  • conditions
  • {
  • Event Player.IsHoldingBall == True;
  • Is Meleeing(Event Player) == True;
  • }
  • actions
  • {
  • Global.Ball2IsMoving = True;
  • Global.Ball2IsVisible = True;
  • Event Player.HasShieldAvailable = False;
  • Global.Ball1Position = Eye Position(Event Player) - Vector(0, Global.BallRadius / 2, 0) + Ray Cast Hit Normal(Eye Position(
  • Global.Ball2Position = Eye Position(Event Player) - Vector(0, Global.BallRadius / 2, 0) + Ray Cast Hit Normal(Eye Position(
  • Event Player), Facing Direction Of(Event Player) * 3, All Players(All Teams), Event Player, True);
  • Global.Ball2DirectionTowards[0] = Min(Max(X Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • Global.Ball2DirectionTowards[1] = Min(Max(Y Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • If(Z Component Of(Facing Direction Of(Event Player)) >= 0);
  • Global.Ball2DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), 0.250), 1);
  • Else;
  • Global.Ball2DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), -1), -0.250);
  • End;
  • Call Subroutine(Ball2ChangeDirectionEffects);
  • Call Subroutine(PlayerMightTalkWhenThrowing);
  • Wait(0.500, Ignore Condition);
  • Event Player.IsHoldingBall = False;
  • }
  • }
  • rule("Holding ball effects")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Player 1 holding ball effects"
  • Create Effect(Filtered Array(Players In Slot(0, Team 1).IsHoldingBall == True, True), Bad Aura, Aqua, Eye Position(Players In Slot(
  • 0, Team 1)) + Vector(0, 2, 0), Global.BallRadius, Visible To Position and Radius);
  • Create Effect(Filtered Array((Players In Slot(0, Team 1).HasShieldAvailable && Players In Slot(0, Team 1).IsHoldingBall) == True,
  • True), Sparkles, Lime Green, Position Of(Players In Slot(0, Team 1)), 2, Visible To Position and Radius);
  • "Player 2 holding ball effects"
  • Create Effect(Filtered Array(Players In Slot(0, Team 2).IsHoldingBall == True, True), Bad Aura, Orange, Eye Position(
  • Players In Slot(0, Team 2)) + Vector(0, 2, 0), Global.BallRadius, Visible To Position and Radius);
  • Create Effect(Filtered Array((Players In Slot(0, Team 2).HasShieldAvailable && Players In Slot(0, Team 2).IsHoldingBall) == True,
  • True), Sparkles, Lime Green, Position Of(Players In Slot(0, Team 1)), 2, Visible To Position and Radius);
  • True), Sparkles, Lime Green, Position Of(Players In Slot(0, Team 2)), 2, Visible To Position and Radius);
  • }
  • }
  • rule("Is holding ball on-screen text")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String("You are holding your ball"), Custom String("Press Melee to throw"), Top, 10, White, White, White,
  • Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams),
  • Current Array Element == Event Player && Event Player.IsHoldingBall && Event Player.HasShieldAvailable), Null, Custom String(
  • "Press Interact to shield"), Null, Top, 11, White, Lime Green, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams),
  • Current Array Element == Event Player && Event Player.IsHoldingBall && !Event Player.HasShieldAvailable), Null, Custom String(
  • "Shield not available"), Null, Top, 11, White, Red, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element == Event Player && Event Player.IsHoldingBall), Null,
  • Custom String(" "), Custom String(" "), Top, 5, White, White, White, Visible To and String, Default Visibility);
  • }
  • }
  • rule("No longer holding melee")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Melee) != True;
  • }
  • actions
  • {
  • Allow Button(Event Player, Melee);
  • }
  • }
  • rule("Cancel melee")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Meleeing(Event Player) == True;
  • }
  • actions
  • {
  • Cancel Primary Action(Event Player);
  • }
  • }
  • rule("Press primary fire to melee")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Primary Fire) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Melee);
  • }
  • }
  • rule("Subroutine - Player might say something when throwing ball")
  • {
  • event
  • {
  • Subroutine;
  • PlayerMightTalkWhenThrowing;
  • }
  • actions
  • {
  • Skip(Random Value In Array(Array(0, 1, 1, 1, 1, 1)));
  • Communicate(Event Player, Incoming);
  • }
  • }
  • disabled rule("--- Shield")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Initialise shield")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.ShieldRadius = 1.250;
  • }
  • }
  • rule("Player is holding interact")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.HasShieldAvailable == True;
  • Event Player.IsHoldingBall == True;
  • Is Button Held(Event Player, Interact) == True;
  • }
  • actions
  • {
  • Event Player.IsUsingShield = True;
  • }
  • }
  • rule("Is not holding interact")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (!Is Button Held(Event Player, Interact) || !Event Player.IsHoldingBall) == True;
  • }
  • actions
  • {
  • Event Player.IsUsingShield = False;
  • }
  • }
  • rule("Shield effects")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Create Effect(Filtered Array(Event Player.IsUsingShield == True, True), Sphere, Lime Green, Eye Position(Event Player) + Vector(0,
  • -0.500, 0), Global.ShieldRadius, Visible To Position and Radius);
  • }
  • }
  • rule("Shield is hit by ball 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Eye Position(Event Player) + Vector(0, -0.500, 0), Global.Ball1Position)
  • <= Global.BallRadius + Global.ShieldRadius;
  • Event Player.IsUsingShield == True;
  • Global.Ball1IsVisible == True;
  • Global.Ball1IsMoving == True;
  • }
  • actions
  • {
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • Call Subroutine(ShieldExplodesEffects);
  • Global.Ball1DirectionTowards[0] = Min(Max(X Component Of(Direction Towards(Eye Position(Event Player) + Vector(0, -0.500, 0),
  • Global.Ball1Position)), -0.750), 0.750);
  • Global.Ball1DirectionTowards[1] = Min(Max(Y Component Of(Direction Towards(Eye Position(Event Player) + Vector(0, -0.500, 0),
  • Global.Ball1Position)), -0.750), 0.750);
  • Global.Ball1DirectionTowards[2] = Min(Max(Z Component Of(Direction Towards(Eye Position(Event Player) + Vector(0, -0.500, 0),
  • Global.Ball1Position)), -0.750), 0.750);
  • Wait(0.050, Ignore Condition);
  • Event Player.IsUsingShield = False;
  • Event Player.HasShieldAvailable = False;
  • }
  • }
  • rule("Shield is hit by ball 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Eye Position(Event Player) + Vector(0, -0.500, 0), Global.Ball2Position)
  • <= Global.BallRadius + Global.ShieldRadius;
  • Event Player.IsUsingShield == True;
  • Global.Ball2IsVisible == True;
  • Global.Ball2IsMoving == True;
  • }
  • actions
  • {
  • Call Subroutine(Ball2ChangeDirectionEffects);
  • Call Subroutine(ShieldExplodesEffects);
  • Global.Ball2DirectionTowards[0] = Min(Max(X Component Of(Direction Towards(Eye Position(Event Player) + Vector(0, -0.500, 0),
  • Global.Ball2Position)), -0.750), 0.750);
  • Global.Ball2DirectionTowards[1] = Min(Max(Y Component Of(Direction Towards(Eye Position(Event Player) + Vector(0, -0.500, 0),
  • Global.Ball2Position)), -0.750), 0.750);
  • Global.Ball2DirectionTowards[2] = Min(Max(Z Component Of(Direction Towards(Eye Position(Event Player) + Vector(0, -0.500, 0),
  • Global.Ball2Position)), -0.750), 0.750);
  • Wait(0.050, Ignore Condition);
  • Event Player.IsUsingShield = False;
  • Event Player.HasShieldAvailable = False;
  • }
  • }
  • rule("Recharge shield for player 1")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Z Component Of(Global.Ball1Position) < 0;
  • }
  • actions
  • {
  • Players In Slot(0, Team 1).HasShieldAvailable = True;
  • }
  • }
  • rule("Recharge shield for player 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Z Component Of(Global.Ball2Position) > 0;
  • }
  • actions
  • {
  • Players In Slot(0, Team 2).HasShieldAvailable = True;
  • }
  • }
  • rule("Subroutine - Shield explodes")
  • {
  • event
  • {
  • Subroutine;
  • ShieldExplodesEffects;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Ring Explosion, Lime Green, Event Player, Global.ShieldRadius * 1.500);
  • Play Effect(All Players(All Teams), Bad Explosion, Lime Green, Event Player, Global.ShieldRadius * 1.500);
  • Play Effect(All Players(All Teams), Bad Pickup Effect, Lime Green, Event Player, Global.ShieldRadius * 1.500);
  • }
  • }
  • disabled rule("--- Advanced mode")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Advanced mode area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.AdvancedArea = Vector(16, 0, -16);
  • Create Effect(Filtered Array(!Global.GameHasStarted, True), Ring, Red, Global.AdvancedArea, 2, Visible To Position and Radius);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Custom String(
  • "All players crouch here to toggle advanced mode"), Global.AdvancedArea + Vector(0, 0.500, 0), 1.100, Clip Against Surfaces,
  • Visible To Position and String, Red, Default Visibility);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Custom String("Advanced mode disables Secondary fire"),
  • Global.AdvancedArea + Vector(0, 0.250, 0), 0.900, Clip Against Surfaces, Visible To Position and String, Red,
  • Default Visibility);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Icon String(Skull), Global.AdvancedArea + Up, 1.100,
  • Clip Against Surfaces, Visible To Position and String, Red, Default Visibility);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted && Global.AdvancedMode, True), Custom String("Currently Enabled"),
  • Global.AdvancedArea + Vector(0, 0, 0), 0.900, Clip Against Surfaces, Visible To Position and String, Green,
  • Default Visibility);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted && !Global.AdvancedMode, True), Custom String("Currently Disabled"),
  • Global.AdvancedArea + Vector(0, 0, 0), 0.900, Clip Against Surfaces, Visible To Position and String, White,
  • Default Visibility);
  • }
  • }
  • rule("All players are crouching in advanced mode area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.GameHasStarted != True;
  • Is True For All(All Living Players(All Teams), Is Button Held(Current Array Element, Crouch)) == True;
  • Is True For All(All Players(All Teams), Distance Between(Position Of(Current Array Element), Global.AdvancedArea) < 2.500) == True;
  • Count Of(All Living Players(All Teams)) > 0;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Global.AdvancedMode = !Global.AdvancedMode;
  • Play Effect(All Players(All Teams), Ring Explosion, Red, Global.AdvancedArea, 5);
  • Play Effect(All Players(All Teams), Ring Explosion Sound, Red, Global.AdvancedArea, 100);
  • }
  • }
  • rule("Advanced mode is enabled")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.AdvancedMode == True;
  • }
  • actions
  • {
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Disallow Button(Event Player, Secondary Fire);
  • Disallow Button(Event Player, Ability 2);
  • }
  • }
  • rule("Advanced mode is disabled")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.AdvancedMode != True;
  • }
  • actions
  • {
  • Allow Button(Event Player, Secondary Fire);
  • If(Hero Of(Event Player) == Hero(Genji));
  • Set Ability 2 Enabled(Event Player, True);
  • Allow Button(Event Player, Ability 2);
  • End;
  • If(Hero Of(Event Player) == Hero(Lúcio));
  • Set Secondary Fire Enabled(Event Player, True);
  • End;
  • }
  • }
  • disabled rule("--- Tutorial")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Tutorial area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.TutorialArea = Vector(8, 0, -4);
  • Create Effect(Filtered Array(!Global.GameHasStarted, True), Ring, Sky Blue, Global.TutorialArea, 2,
  • Visible To Position and Radius);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Custom String(
  • "All players crouch here to learn how to play (1 minute)"), Global.TutorialArea + Vector(0, 0.500, 0), 1.100,
  • Clip Against Surfaces, Visible To Position and String, Sky Blue, Default Visibility);
  • Create In-World Text(Filtered Array(!Global.GameHasStarted, True), Icon String(Question Mark), Global.TutorialArea + Up, 1.100,
  • Clip Against Surfaces, Visible To Position and String, Sky Blue, Default Visibility);
  • }
  • }
  • rule("All players are crouching in tutorial area")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.GameHasStarted != True;
  • Is True For All(All Living Players(All Teams), Is Button Held(Current Array Element, Crouch)) == True;
  • Is True For All(All Players(All Teams), Distance Between(Position Of(Current Array Element), Global.TutorialArea) < 2.500) == True;
  • Count Of(All Living Players(All Teams)) > 0;
  • }
  • actions
  • {
  • Wait(0.250, Abort When False);
  • Clear Status(All Players(All Teams), Phased Out);
  • Global.TutorialActive = True;
  • }
  • }
  • rule("Tutorial Ball 1 hit player 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Slot 1;
  • }
  • conditions
  • {
  • Distance Between(Eye Position(Event Player) + Vector(0, -0.500, 0), Global.Ball1Position) <= Global.BallRadius * 2.500;
  • ((Hero Of(Event Player) == Hero(Lúcio) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) == Hero(Genji)
  • && Is Using Ability 2(Event Player) && Is In View Angle(Event Player, Global.Ball1Position, 60))) != True;
  • Global.Ball1IsMoving == True;
  • Global.Ball1IsVisible == True;
  • Event Player.IsUsingShield != True;
  • Global.TutorialActive == True;
  • }
  • actions
  • {
  • Global.Ball1Position = Vector(0, -5, 0);
  • Call Subroutine(BallHitAPlayer);
  • Global.Ball1IsVisible = False;
  • Global.Ball1IsMoving = False;
  • }
  • }
  • rule("Tutorial Ball 2 hit player 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Slot 1;
  • }
  • conditions
  • {
  • Distance Between(Eye Position(Event Player) + Vector(0, -0.500, 0), Global.Ball2Position) <= Global.BallRadius * 2.500;
  • ((Hero Of(Event Player) == Hero(Lúcio) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) == Hero(Genji)
  • && Is Using Ability 2(Event Player) && Is In View Angle(Event Player, Global.Ball1Position, 60))) != True;
  • Global.Ball2IsMoving == True;
  • Global.Ball2IsVisible == True;
  • Event Player.IsHoldingBall != True;
  • Event Player.IsUsingShield != True;
  • Global.TutorialActive == True;
  • }
  • actions
  • {
  • Global.Ball2Position = Vector(0, -5, 0);
  • Call Subroutine(BallHitAPlayer);
  • Global.Ball2IsVisible = False;
  • Global.Ball2IsMoving = False;
  • }
  • }
  • rule("Tutorial Ball 1 hit player 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Slot 1;
  • }
  • conditions
  • {
  • Distance Between(Eye Position(Event Player) + Vector(0, -0.500, 0), Global.Ball1Position) <= Global.BallRadius * 2.500;
  • ((Hero Of(Event Player) == Hero(Lúcio) && Is Firing Secondary(Event Player)) || (Hero Of(Event Player) == Hero(Genji)
  • && Is Using Ability 2(Event Player) && Is In View Angle(Event Player, Global.Ball1Position, 60))) != True;
  • Global.Ball1IsMoving == True;
  • Global.Ball1IsVisible == True;
  • Event Player.IsHoldingBall != True;
  • Event Player.IsUsingShield != True;
  • Global.TutorialActive == True;
  • }
  • actions
  • {
  • Global.Ball1Position = Vector(0, -5, 0);
  • Call Subroutine(BallHitAPlayer);
  • Global.Ball1IsVisible = False;
  • Global.Ball1IsMoving = False;
  • }
  • }
  • rule("Tutorial Player 1 is using melee near ball 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Slot 1;
  • }
  • conditions
  • {
  • Is Meleeing(Event Player) == True;
  • Distance Between(Position Of(Event Player), Global.Ball1Position) <= 2.500;
  • Is In View Angle(Event Player, Global.Ball1Position, 60) == True;
  • Global.Ball1IsVisible == True;
  • Event Player.IsHoldingBall != True;
  • }
  • actions
  • {
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • Global.Ball1IsVisible = False;
  • Global.Ball1IsMoving = False;
  • Global.Ball1Position = Vector(0, -5, 0);
  • Stop Holding Button(Event Player, Melee);
  • Disallow Button(Event Player, Melee);
  • Wait(0.100, Ignore Condition);
  • Event Player.IsHoldingBall = True;
  • Event Player.HasShieldAvailable = True;
  • }
  • }
  • rule("Tutorial Player 1 Is holding ball and press melee")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Slot 1;
  • }
  • conditions
  • {
  • Event Player.IsHoldingBall == True;
  • Is Meleeing(Event Player) == True;
  • }
  • actions
  • {
  • Global.Ball1IsMoving = True;
  • Global.Ball1IsVisible = True;
  • Event Player.HasShieldAvailable = False;
  • Global.Ball1Position = Eye Position(Event Player) - Vector(0, Global.BallRadius / 2, 0) + Ray Cast Hit Normal(Eye Position(
  • Event Player), Facing Direction Of(Event Player) * 3, All Players(All Teams), Event Player, True);
  • Global.Ball1DirectionTowards[0] = Min(Max(X Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • Global.Ball1DirectionTowards[1] = Min(Max(Y Component Of(Facing Direction Of(Event Player)), -0.750), 0.750);
  • If(Z Component Of(Facing Direction Of(Event Player)) >= 0);
  • Global.Ball1DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), 0.250), 1);
  • Else;
  • Global.Ball1DirectionTowards[2] = Min(Max(Z Component Of(Facing Direction Of(Event Player)), -1), -0.250);
  • End;
  • Call Subroutine(Ball1ChangeDirectionEffects);
  • Call Subroutine(PlayerMightTalkWhenThrowing);
  • Wait(0.500, Ignore Condition);
  • Event Player.IsHoldingBall = False;
  • }
  • }
  • rule("Tutorial is active")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.TutorialActive == True;
  • }
  • actions
  • {
  • Set Status(All Players(All Teams), Null, Rooted, 9999);
  • Set Invisible(All Players(All Teams), All);
  • Global.Ball1IsVisible = False;
  • Global.Ball2IsVisible = False;
  • Global.Ball1Position = Vector(0, -5, 0);
  • Global.Ball2Position = Vector(0, -5, 0);
  • Start Camera(All Players(All Teams), Vector(0, 5, 0), Vector(-0.001, 0, 0), 0);
  • Wait(0.050, Ignore Condition);
  • "Camera above play area"
  • Start Camera(All Players(All Teams), Vector(0.001, 16, 0.001), Vector(-0.001, 0.002, 0.001), 2);
  • Wait(0.500, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("There's a good amount of rules, so sit tight."));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Each player has their own play area that they can not leave."));
  • Wait(1, Ignore Condition);
  • "Spawn bots for demonstation"
  • Create Dummy Bot(Hero(Genji), Team 1, 1, Global.Player1PlayArea + Forward, Vector(0, 0, 0));
  • Create Dummy Bot(Hero(Genji), Team 2, 1, Global.Player2PlayArea + Backward, Vector(0, 0, 0));
  • Wait(0.150, Ignore Condition);
  • Teleport(Players In Slot(1, Team 1), Global.Player1PlayArea + Forward);
  • Teleport(Players In Slot(1, Team 2), Global.Player2PlayArea + Backward);
  • Wait(0.350, Ignore Condition);
  • Set Facing(Players In Slot(1, Team 1), Global.Player2PlayArea + Vector(0, 0.100, 0), To World);
  • Set Facing(Players In Slot(1, Team 2), Global.Player1PlayArea + Vector(0, 0.100, 0), To World);
  • "Spawn balls"
  • Wait(3, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Each player has their own ball."));
  • Start Camera(All Players(All Teams), Vector(3, 1, 10), Vector(0.001, 1, 12), 0.750);
  • Call Subroutine(Ball1Respawn);
  • Wait(5, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("You can propel your ball using [Secondary Fire]"));
  • Wait(2, Ignore Condition);
  • Press Button(Players In Slot(1, Team 1), Secondary Fire);
  • Wait(0.500, Ignore Condition);
  • Start Camera(All Players(All Teams), Vector(3, 1, 10), Global.Player2PlayArea + Up, 2);
  • Wait(2.500, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("When you hit your opponent you score a point."));
  • Wait(2, Ignore Condition);
  • Call Subroutine(Ball2Respawn);
  • Small Message(All Players(All Teams), Custom String("Your enemy also has a ball they can propel at you."));
  • Wait(3, Ignore Condition);
  • Press Button(Players In Slot(1, Team 2), Secondary Fire);
  • Start Camera(All Players(All Teams), Vector(3, 1, 10), Vector(0.001, 1, 12), 2);
  • Wait(2, Ignore Condition);
  • Press Button(Players In Slot(1, Team 1), Secondary Fire);
  • Small Message(All Players(All Teams), Custom String("Which can also be deflected back at them."));
  • Wait(0.500, Ignore Condition);
  • Start Camera(All Players(All Teams), Vector(3, 1, 10), Global.Player2PlayArea + Up, 2);
  • Wait(3, Ignore Condition);
  • Start Camera(All Players(All Teams), Vector(3, 1, 10), Vector(0.001, 1, 12), 2);
  • Call Subroutine(Ball1Respawn);
  • Small Message(All Players(All Teams), Custom String("Instead of deflecting your ball, you can catch it using [Primary fire]"));
  • Wait(3, Ignore Condition);
  • Press Button(Players In Slot(1, Team 1), Primary Fire);
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("You can throw the ball in any direction using [Primary fire] again"));
  • Wait(1, Ignore Condition);
  • Set Facing(Players In Slot(1, Team 1), Vector(2, 4, -20), To World);
  • Wait(0.250, Ignore Condition);
  • Press Button(Players In Slot(1, Team 1), Primary Fire);
  • Start Camera(All Players(All Teams), Vector(3, 1, 16), Global.Player2PlayArea + Up, 2);
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("The ball returns when it hits the opponents wall."));
  • Wait(1.500, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("A returning ball can not hit your opponent."));
  • Wait(2.500, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("But it can hit you!"));
  • Wait(2, Ignore Condition);
  • Set Facing(Players In Slot(1, Team 1), Vector(0, 0, -1), To World);
  • Start Throttle In Direction(Players In Slot(1, Team 2), Vector(1, 0, 0), 1, To World, Replace existing throttle,
  • Direction and Magnitude);
  • Wait(0.400, Ignore Condition);
  • Stop Throttle In Direction(Players In Slot(1, Team 2));
  • Call Subroutine(Ball1Respawn);
  • Press Button(Players In Slot(1, Team 1), Secondary Fire);
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Hitting the target behind your opponent will increase the speed of your ball."));
  • Wait(3.900, Ignore Condition);
  • Press Button(Players In Slot(1, Team 1), Primary Fire);
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("While holding your ball you can use a shield by holding [Interact]"));
  • Wait(1, Ignore Condition);
  • Start Holding Button(Players In Slot(1, Team 1), Interact);
  • Call Subroutine(Ball2Respawn);
  • Start Throttle In Direction(Players In Slot(1, Team 2), Vector(-1, 0, 0), 1, To World, Replace existing throttle,
  • Direction and Magnitude);
  • Wait(0.400, Ignore Condition);
  • Stop Throttle In Direction(Players In Slot(1, Team 2));
  • Press Button(Players In Slot(1, Team 2), Secondary Fire);
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Your shield is lost once it's hit."));
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Catch the ball after it has passed the center to recharge your shield."));
  • Wait(3, Ignore Condition);
  • Start Camera(All Players(All Teams), Vector(0, 5, 0), Vector(-0.001, 0, 0), 0.500);
  • Wait(1, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("That's the basics. Good luck!"));
  • Wait(3, Ignore Condition);
  • Stop Camera(All Players(All Teams));
  • Set Invisible(All Players(All Teams), None);
  • Clear Status(All Players(All Teams), Rooted);
  • Destroy Dummy Bot(Team 1, 1);
  • Destroy Dummy Bot(Team 2, 1);
  • Call Subroutine(Ball1Respawn);
  • Call Subroutine(Ball2Respawn);
  • }
  • }
Join the Workshop.codes Discord