Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "Use many different abilities to make your way across the map from checkpoint to checkpoint. Made by Mitsiee. More info on https://workshop.codes/echo-parkour. v1.0.11.1 - Rialto"
  • Description: "Use many different abilities to make your way across the map from checkpoint to checkpoint. Made by Mitsiee. More info on https://workshop.codes/echo-parkour. v1.0.11.2 - Rialto"
  • }
  • lobby
  • {
  • Allow Players Who Are In Queue: Yes
  • }
  • modes
  • {
  • Skirmish
  • {
  • enabled maps
  • {
  • Rialto
  • }
  • }
  • General
  • {
  • Game Mode Start: Manual
  • Hero Limit: Off
  • Kill Cam: Off
  • Kill Feed: Off
  • Respawn Time Scalar: 0%
  • Spawn Health Packs: Disabled
  • }
  • }
  • heroes
  • {
  • General
  • {
  • Echo
  • {
  • Damage Dealt: 10%
  • Damage Received: 10%
  • Flight Cooldown Time: 0%
  • Focusing Beam Cooldown Time: 15%
  • Glide: Off
  • No Ammunition Requirement: On
  • Quick Melee: Off
  • Sticky Bombs Cooldown Time: 0%
  • Ultimate Ability Duplicate: Off
  • }
  • enabled heroes
  • {
  • Echo
  • }
  • }
  • }
  • }
  • variables
  • {
  • global:
  • 0: CheckpointPositions
  • 1: CheckpointRadius
  • 2: RingPositions
  • player:
  • 0: JumpPadLocations
  • 1: JumpPadLoop
  • 2: JumpPadEffects
  • 3: RemoveEffectsLoop
  • 4: FindJumpPadLoop
  • 5: GrapplePoint
  • 6: GrappleEffect
  • 7: IsGrappling
  • 8: CurrentCheckpoint
  • 10: Timer
  • 11: FindRingLoop
  • 12: CurrentCheckpointRingsArray
  • 13: RingsArrayLoop
  • 14: CutOffArray
  • 15: InstructionsShown
  • 16: InstructionsText1
  • 17: InstructionsText2
  • 18: InstructionsText3
  • 19: InstructionsText4
  • 20: InstructionsText5
  • 21: InstructionsText6
  • 22: FinalTime
  • 23: BestTime
  • 24: TimerChase
  • 25: InstructionsText7
  • }
  • subroutines
  • {
  • 0: SetCurrentRingsArray
  • 1: ResetJumpPads
  • 2: SetAvailableAbilities
  • }
  • disabled rule("Made by Mitsiee. More info on https://workshop.codes/echo-parkour")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • disabled rule("Initialise")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Initialise player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Event Player.CurrentCheckpoint = -1;
  • Event Player.InstructionsShown = False;
  • Event Player.TimerChase = 100000;
  • Set Status(Event Player, Null, Phased Out, 9999);
  • Call Subroutine(SetCurrentRingsArray);
  • Call Subroutine(SetAvailableAbilities);
  • }
  • }
  • rule("Phase out player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Phased Out, 9999);
  • }
  • }
  • rule("Teleport player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Is In Spawn Room(Event Player) == True;
  • }
  • actions
  • {
  • Teleport(Event Player, Global.CheckpointPositions[Event Player.CurrentCheckpoint] + Vector(0, 0.250, 0));
  • Wait(0.250, Ignore Condition);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player),
  • Global.CheckpointPositions[Event Player.CurrentCheckpoint + 1]), To World);
  • }
  • }
  • disabled rule("HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Number of checkpoints reached")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Null, Custom String("Map difficulty: Easy {0}", Icon String(Happy)), Null, Right, 1, White, Green,
  • White, Visible To and String, Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String("Checkpoint {0} / {1} {2}", Event Player.CurrentCheckpoint, Count Of(
  • Global.CheckpointPositions) - 1, Icon String(Flag)), Null, Right, 2, White, Turquoise, White, Visible To and String,
  • Default Visibility);
  • }
  • }
  • rule("Timer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Null, Custom String("Timer: {0}", Event Player.Timer), Null, Top, 5, White, White, White,
  • Visible To and String, Default Visibility);
  • }
  • }
  • rule("Start timer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • (Is Using Ability 1(Event Player) || Is Using Ability 2(Event Player) || Is Button Held(Event Player, Jump)) == True;
  • Event Player.Timer == 0;
  • Event Player.CurrentCheckpoint + 1 != Count Of(Global.CheckpointPositions);
  • }
  • actions
  • {
  • Event Player.TimerChase = 10000;
  • Chase Player Variable At Rate(Event Player, Timer, Event Player.TimerChase, 1, Destination and Rate);
  • }
  • }
  • rule("How to show controls")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
  • Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
  • Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
  • Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
  • Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 0, White, White, White, Visible To and String,
  • Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String("{0} Press [Interact] to toggle full instructions", Icon String(Question Mark)),
  • Null, Left, 0, White, Blue, White, Visible To and String, Default Visibility);
  • }
  • }
  • rule("Pressing interact to show controls")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Interact) == True;
  • Event Player.InstructionsShown == False;
  • }
  • actions
  • {
  • Disallow Button(Event Player, Interact);
  • Create HUD Text(Event Player, Null, Custom String("Pressing [Ability 1] will give you 2 quick boosts forward."), Null, Left, 1,
  • White, White, White, Visible To and String, Default Visibility);
  • Event Player.InstructionsText1 = Last Text ID;
  • Create HUD Text(Event Player, Null, Custom String(
  • "Pressing [Ability 2] will attach a grappling hook to a surface (20 meters range)."), Null, Left, 2, White, White, White,
  • Visible To and String, Default Visibility);
  • Event Player.InstructionsText2 = Last Text ID;
  • Create HUD Text(Event Player, Null, Custom String(
  • "Pressing [Secondary fire] will spawn jump pads on the location of each sticky bomb."), Null, Left, 3, White, White, White,
  • Visible To and String, Default Visibility);
  • Event Player.InstructionsText3 = Last Text ID;
  • Create HUD Text(Event Player, Null, Custom String("The abilities you have available will vary per checkpoint."), Null, Left, 4,
  • White, White, White, Visible To and String, Default Visibility);
  • Event Player.InstructionsText4 = Last Text ID;
  • Create HUD Text(Event Player, Null, Custom String(
  • "Each checkpoint may have one or more yellow rings. Flying through these rings will recharge [Ability 1]."), Null, Left, 5,
  • White, Yellow, White, Visible To and String, Default Visibility);
  • Event Player.InstructionsText5 = Last Text ID;
  • Create HUD Text(Event Player, Null, Custom String("Press [Reload] for a quick reset."), Null, Left, 6, White, Aqua, White,
  • Visible To and String, Default Visibility);
  • Event Player.InstructionsText6 = Last Text ID;
  • Create HUD Text(Event Player, Null, Custom String("Press [Crouch] + [Ultimate] + [Interact] for a full reset back to the start."),
  • Null, Left, 7, White, Orange, White, Visible To and String, Default Visibility);
  • Event Player.InstructionsText7 = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Event Player.InstructionsShown = True;
  • Allow Button(Event Player, Interact);
  • }
  • }
  • rule("Pressing interact to hide controls")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Interact) == True;
  • Event Player.InstructionsShown == True;
  • }
  • actions
  • {
  • Disallow Button(Event Player, Interact);
  • Destroy HUD Text(Event Player.InstructionsText1);
  • Destroy HUD Text(Event Player.InstructionsText2);
  • Destroy HUD Text(Event Player.InstructionsText3);
  • Destroy HUD Text(Event Player.InstructionsText4);
  • Destroy HUD Text(Event Player.InstructionsText5);
  • Destroy HUD Text(Event Player.InstructionsText6);
  • Destroy HUD Text(Event Player.InstructionsText7);
  • Wait(0.100, Ignore Condition);
  • Event Player.InstructionsShown = False;
  • Allow Button(Event Player, Interact);
  • }
  • }
  • rule("In-world instructions")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "----- Instructions on first checkpoint, explaining Flight"
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.CurrentCheckpoint == 0), Custom String(
  • "{0} Press [Ability 1] to launch yourself", Icon String(Question Mark)), Global.CheckpointPositions[1] + Vector(0, -2, 0), 1,
  • Do Not Clip, Visible To Position and String, Blue, Default Visibility);
  • "----- Instructions on 2rd checkpoint, explaining grapple"
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.CurrentCheckpoint == 1), Custom String(
  • "{0} Press [Ability 2] to grapple, Press again to let go early", Icon String(Question Mark)),
  • Global.CheckpointPositions[2] + Vector(0, -2, 0), 1, Do Not Clip, Visible To Position and String, Blue, Default Visibility);
  • "----- Instructions on 3rd checkpoint, explaining Jump pads"
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.CurrentCheckpoint == 2), Custom String(
  • "{0} Press [Secondary fire] to spawn jump pads on location of bombs", Icon String(Question Mark)),
  • Global.CheckpointPositions[3] + Vector(0, -2, 0), 1, Do Not Clip, Visible To Position and String, Blue, Default Visibility);
  • "----- Instructions explaining Rings"
  • Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.CurrentCheckpoint == 5), Custom String(
  • "{0} Pick up to charge [Ability 1]", Icon String(Question Mark)), Global.RingPositions[2], 1, Clip Against Surfaces,
  • Visible To Position and String, Yellow, Default Visibility);
  • }
  • }
  • rule("Best and Final timer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Create HUD Text(Filtered Array(Event Player, Current Array Element.FinalTime > 0), Null, Custom String("Final time: {0}",
  • Event Player.FinalTime), Null, Top, 1, White, Orange, White, Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(Event Player, Current Array Element.BestTime > 0), Null, Custom String("Your best time: {0}",
  • Event Player.BestTime), Null, Top, 2, White, Turquoise, White, Visible To and String, Default Visibility);
  • }
  • }
  • disabled rule("Checkpoints")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Subroutine - Available abilities")
  • {
  • event
  • {
  • Subroutine;
  • SetAvailableAbilities;
  • }
  • actions
  • {
  • Wait(0.050, Ignore Condition);
  • If(Event Player.CurrentCheckpoint == 0);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 1);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 2);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Else If(Event Player.CurrentCheckpoint == 3);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • Else If(Event Player.CurrentCheckpoint == 4);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 5);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 6);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 7);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Else If(Event Player.CurrentCheckpoint == 8);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 9);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 10);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 11);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Else If(Event Player.CurrentCheckpoint == 12);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 13);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 14);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, True);
  • Else If(Event Player.CurrentCheckpoint == 15);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 16);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 17);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 18);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 19);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else If(Event Player.CurrentCheckpoint == 20);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • Else If(Event Player.CurrentCheckpoint == 21);
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Else;
  • Set Ability 1 Enabled(Event Player, True);
  • Set Ability 2 Enabled(Event Player, True);
  • Set Secondary Fire Enabled(Event Player, True);
  • End;
  • }
  • }
  • rule("Set checkpoints")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.CheckpointPositions = Empty Array;
  • Global.CheckpointRadius = Empty Array;
  • "--- Start"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(97.238, 0.278, -21.009));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Balcony on first corner"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(66.435, 6.448, -21.573));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Balcony on second corner"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(61.023, 6.448, -40.104));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3.500);
  • "--- Window on 3rd corner, Widow likes to camp there"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(42.971, 7.448, -49.990));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Stairs back alley before first tunnel"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(44.253, 6.438, -85.948));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- After tunnel and bridge on way to second control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(7.140, 1.449, -76.333));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 5);
  • "--- Turn on way to second control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-20.034, 0.299, -43.104));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Brush near the water near second control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-45.916, 3.048, -67.089));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Brush on the way to 3rd control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-72.963, 4.655, -100.477));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- 3rd control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-57.004, 4.503, -131.500));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Flank area at attacker spawn"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(99.585, 1.452, -49.574));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Left balcony after attack spawn"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(78.146, 5.457, -13.575));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 4.500);
  • "--- Sewers thingie in park"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(39.938, 3.837, -31.764));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Outskirts near first control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(53.913, 0.451, -92.050));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3.500);
  • "--- Gelato terrace"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(63.108, 1.448, -70.408));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Theater top right"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(1.335, 7.451, -71.033));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 4.500);
  • "--- Theater exit"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-6.969, 1.448, -47.870));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Inside bridge to last control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-35.987, 6.448, -79.025));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 4.500);
  • "--- Back of last control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-57.026, 6.449, -145.760));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3.500);
  • "--- Right before last control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-56.811, 3.299, -100.677));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Outskirts of second control point, near docks"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-27.727, 0.449, -31.575));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • "--- Middle of bridge, on way to second control point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(20.535, 3.306, -68.513));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3.500);
  • "--- Bridge at attackers flank first point"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(90.883, 2.449, -49.963));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3.500);
  • "--- The very end"
  • Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-56.965, 4.299, -136.381));
  • Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
  • }
  • }
  • rule("Create checkpoint effects for player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Create Effect(Event Player, Ring, Blue, Global.CheckpointPositions[Event Player.CurrentCheckpoint] - Vector(0, 1, 0),
  • Global.CheckpointRadius[Event Player.CurrentCheckpoint] - 0.500, Visible To Position and Radius);
  • Create Effect(Event Player, Ring, Blue, Global.CheckpointPositions[Event Player.CurrentCheckpoint + 1] - Vector(0, 1, 0),
  • Global.CheckpointRadius[Event Player.CurrentCheckpoint + 1] - 0.500, Visible To Position and Radius);
  • Create Icon(Event Player, Global.CheckpointPositions[Event Player.CurrentCheckpoint + 1] - Vector(0, 1, 0), Flag,
  • Visible To and Position, Blue, True);
  • }
  • }
  • rule("Player has entered Checkpoint")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Is On Ground(Event Player) == True;
  • Distance Between(Position Of(Event Player), Global.CheckpointPositions[Event Player.CurrentCheckpoint + 1])
  • <= Global.CheckpointRadius[Event Player.CurrentCheckpoint + 1];
  • Event Player.CurrentCheckpoint + 1 < Count Of(Global.CheckpointPositions);
  • }
  • actions
  • {
  • Play Effect(Event Player, Buff Impact Sound, White, Event Player, 100);
  • Play Effect(All Players(All Teams), Good Explosion, Sky Blue, Event Player, 5);
  • Event Player.CurrentCheckpoint += 1;
  • Small Message(Event Player, Custom String("Checkpoint {0} / {1} reached", Event Player.CurrentCheckpoint, Count Of(
  • Global.CheckpointPositions) - 1));
  • Call Subroutine(ResetJumpPads);
  • Call Subroutine(SetCurrentRingsArray);
  • Call Subroutine(SetAvailableAbilities);
  • }
  • }
  • disabled rule("Rings")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Ring positions")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "------------------------"
  • Global.RingPositions = Append To Array(Global.RingPositions, 5);
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(6.955, 4.299, -42.932));
  • "------------------------"
  • Global.RingPositions = Append To Array(Global.RingPositions, 6);
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-19.820, 4.299, -66.865));
  • "------------------------"
  • Global.RingPositions = Append To Array(Global.RingPositions, 7);
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-36.027, 11.448, -78.984));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-36.522, 11.302, -100.247));
  • "------------------------"
  • Global.RingPositions = Append To Array(Global.RingPositions, 9);
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-56.984, 14.299, -106.494));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-56.982, 18.448, -84.755));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-57.020, 14.449, -42.586));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-24.237, 10.449, -42.117));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-1.822, 14.061, -41.909));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(34.125, 12.499, -41.182));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(65.194, 14.299, -43.848));
  • "------------------------"
  • Global.RingPositions = Append To Array(Global.RingPositions, 12);
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(20.523, -1.682, -61.582));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(20.473, -1.708, -75.391));
  • "------------------------"
  • Global.RingPositions = Append To Array(Global.RingPositions, 16);
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-24.954, 2.952, -48.514));
  • "------------------------"
  • Global.RingPositions = Append To Array(Global.RingPositions, 18);
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-56.991, 8.503, -133.703));
  • "------------------------"
  • Global.RingPositions = Append To Array(Global.RingPositions, 19);
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-33.345, 15.043, -84.678));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-4.407, 14.796, -78.245));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(31.602, 8.472, -78.210));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(31.799, 10.448, -54.482));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(-1.927, 14.053, -41.940));
  • "------------------------"
  • Global.RingPositions = Append To Array(Global.RingPositions, 21);
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(21.202, 1.458, -31.979));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(23.550, 1.448, -9.306));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(54.374, 1.449, -1.365));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(78.955, 1.452, 5.959));
  • Global.RingPositions = Append To Array(Global.RingPositions, Vector(90.015, 3.291, -21.036));
  • }
  • }
  • rule("Subroutine - Set current rings array")
  • {
  • event
  • {
  • Subroutine;
  • SetCurrentRingsArray;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Event Player.CutOffArray = False;
  • "Get the rings starting from current checkpoint"
  • Event Player.CurrentCheckpointRingsArray = Array Slice(Global.RingPositions, Index Of Array Value(Global.RingPositions,
  • Event Player.CurrentCheckpoint), 10);
  • "Remove checkpoint number value"
  • Event Player.CurrentCheckpointRingsArray = Remove From Array(Event Player.CurrentCheckpointRingsArray,
  • Event Player.CurrentCheckpoint);
  • For Player Variable(Event Player, RingsArrayLoop, 0, Count Of(Event Player.CurrentCheckpointRingsArray), 1);
  • "Check if value is a vector, if it is, remove all further elements"
  • If(Y Component Of(Event Player.CurrentCheckpointRingsArray[Event Player.RingsArrayLoop]) == 0);
  • Event Player.CutOffArray = True;
  • End;
  • If(Event Player.CutOffArray);
  • Event Player.CurrentCheckpointRingsArray = Remove From Array(Event Player.CurrentCheckpointRingsArray,
  • Event Player.CurrentCheckpointRingsArray[Event Player.RingsArrayLoop]);
  • Event Player.RingsArrayLoop -= 1;
  • End;
  • End;
  • }
  • }
  • rule("Create ring effects")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Wait(0.250, Ignore Condition);
  • Wait(0.250, Ignore Condition);
  • Create Effect(Filtered Array(Event Player, Count Of(Event Player.CurrentCheckpointRingsArray) > 0), Good Aura, Yellow,
  • Event Player.CurrentCheckpointRingsArray[0], 1.500, Visible To Position and Radius);
  • Create Effect(Filtered Array(Event Player, Count Of(Event Player.CurrentCheckpointRingsArray) > 0), Good Aura, Yellow,
  • Event Player.CurrentCheckpointRingsArray[1], 1.500, Visible To Position and Radius);
  • Create Effect(Filtered Array(Event Player, Count Of(Event Player.CurrentCheckpointRingsArray) > 0), Good Aura, Yellow,
  • Event Player.CurrentCheckpointRingsArray[2], 1.500, Visible To Position and Radius);
  • Create Effect(Filtered Array(Event Player, Count Of(Event Player.CurrentCheckpointRingsArray) > 0), Good Aura, Yellow,
  • Event Player.CurrentCheckpointRingsArray[3], 1.500, Visible To Position and Radius);
  • }
  • }
  • rule("Check if player is in Ring")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is In Air(Event Player) == True;
  • Is True For Any(Event Player.CurrentCheckpointRingsArray, Distance Between(Current Array Element, Event Player)
  • <= 2.500 && Y Component Of(Current Array Element) != 0) == True;
  • }
  • actions
  • {
  • For Player Variable(Event Player, FindRingLoop, 0, Count Of(Event Player.CurrentCheckpointRingsArray), 1);
  • If(Distance Between(Event Player, Event Player.CurrentCheckpointRingsArray[Event Player.FindRingLoop]) <= 2.500);
  • Event Player.CurrentCheckpointRingsArray = Remove From Array(Event Player.CurrentCheckpointRingsArray,
  • Event Player.CurrentCheckpointRingsArray[Event Player.FindRingLoop]);
  • Event Player.FindRingLoop = 10;
  • End;
  • End;
  • Small Message(Event Player, Custom String("You picked up a ring!"));
  • Set Ability 1 Enabled(Event Player, True);
  • Play Effect(Event Player, Ring Explosion Sound, White, Event Player, 90);
  • }
  • }
  • disabled rule("Death zone")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Player is on the ground and not in a checkpoint")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is In Spawn Room(Event Player) != True;
  • Is Alive(Event Player) == True;
  • Is On Ground(Event Player) == True;
  • (Distance Between(Position Of(Event Player), Global.CheckpointPositions[Event Player.CurrentCheckpoint + 1])
  • <= Global.CheckpointRadius[Event Player.CurrentCheckpoint + 1] || Distance Between(Position Of(Event Player),
  • Global.CheckpointPositions[Event Player.CurrentCheckpoint]) <= Global.CheckpointRadius[Event Player.CurrentCheckpoint])
  • != True;
  • }
  • actions
  • {
  • Kill(Event Player, Null);
  • }
  • }
  • disabled rule("Sticky bomb")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Create Sticky Bomb jump pads")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.JumpPadLocations = Empty Array;
  • For Player Variable(Event Player, JumpPadLoop, 0, 6, 1);
  • Wait(0.065, Ignore Condition);
  • Event Player.JumpPadLocations[Event Player.JumpPadLoop] = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(
  • Event Player) + Facing Direction Of(Event Player) * 200, Null, All Players(All Teams), False);
  • End;
  • Set Secondary Fire Enabled(Event Player, False);
  • }
  • }
  • rule("Remove previous effects")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • For Player Variable(Event Player, RemoveEffectsLoop, 0, Count Of(Event Player.JumpPadEffects), 1);
  • Destroy Effect(Event Player.JumpPadEffects[Event Player.RemoveEffectsLoop]);
  • End;
  • }
  • }
  • rule("[0] Sticky bomb pad delay")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.JumpPadLocations[0] != 0;
  • }
  • actions
  • {
  • Wait(Distance Between(Position Of(Event Player), Event Player.JumpPadLocations[0]) / 50, Ignore Condition);
  • Create Effect(Event Player, Sphere, Green, Event Player.JumpPadLocations[0], 1, None);
  • Event Player.JumpPadEffects[0] = Last Created Entity;
  • }
  • }
  • rule("[1] Sticky bomb pad delay")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.JumpPadLocations[1] != 0;
  • }
  • actions
  • {
  • Wait(Distance Between(Position Of(Event Player), Event Player.JumpPadLocations[1]) / 50, Ignore Condition);
  • Create Effect(Event Player, Sphere, Green, Event Player.JumpPadLocations[1], 1, None);
  • Event Player.JumpPadEffects[1] = Last Created Entity;
  • }
  • }
  • rule("[2] Sticky bomb pad delay")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.JumpPadLocations[2] != 0;
  • }
  • actions
  • {
  • Wait(Distance Between(Position Of(Event Player), Event Player.JumpPadLocations[2]) / 50, Ignore Condition);
  • Create Effect(Event Player, Sphere, Green, Event Player.JumpPadLocations[2], 1, None);
  • Event Player.JumpPadEffects[2] = Last Created Entity;
  • }
  • }
  • rule("[3] Sticky bomb pad delay")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.JumpPadLocations[3] != 0;
  • }
  • actions
  • {
  • Wait(Distance Between(Position Of(Event Player), Event Player.JumpPadLocations[3]) / 50, Ignore Condition);
  • Create Effect(Event Player, Sphere, Green, Event Player.JumpPadLocations[3], 1, None);
  • Event Player.JumpPadEffects[3] = Last Created Entity;
  • }
  • }
  • rule("[4] Sticky bomb pad delay")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.JumpPadLocations[4] != 0;
  • }
  • actions
  • {
  • Wait(Distance Between(Position Of(Event Player), Event Player.JumpPadLocations[4]) / 50, Ignore Condition);
  • Create Effect(Event Player, Sphere, Green, Event Player.JumpPadLocations[4], 1, None);
  • Event Player.JumpPadEffects[4] = Last Created Entity;
  • }
  • }
  • rule("[5] Sticky bomb pad delay")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.JumpPadLocations[5] != 0;
  • }
  • actions
  • {
  • Wait(Distance Between(Position Of(Event Player), Event Player.JumpPadLocations[5]) / 50, Ignore Condition);
  • Create Effect(Event Player, Sphere, Green, Event Player.JumpPadLocations[5], 1, None);
  • Event Player.JumpPadEffects[5] = Last Created Entity;
  • }
  • }
  • rule("Check if player is on jump pad")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is True For Any(Event Player.JumpPadLocations, Distance Between(Current Array Element, Event Player) <= 3) == True;
  • }
  • actions
  • {
  • For Player Variable(Event Player, FindJumpPadLoop, 0, Count Of(Event Player.JumpPadLocations), 1);
  • If(Distance Between(Event Player, Event Player.JumpPadLocations[Event Player.FindJumpPadLoop]) <= 3);
  • Event Player.JumpPadLocations[Event Player.FindJumpPadLoop] = Vector(0, 0, 0);
  • Destroy Effect(Event Player.JumpPadEffects[Event Player.FindJumpPadLoop]);
  • Event Player.FindJumpPadLoop = 6;
  • End;
  • End;
  • Apply Impulse(Event Player, Up, 15, To World, Cancel Contrary Motion);
  • Play Effect(Event Player, Explosion Sound, White, Event Player, 50);
  • }
  • }
  • rule("Subroutine - Reset jump pads")
  • {
  • event
  • {
  • Subroutine;
  • ResetJumpPads;
  • }
  • actions
  • {
  • For Player Variable(Event Player, RemoveEffectsLoop, 0, Count Of(Event Player.JumpPadEffects), 1);
  • Destroy Effect(Event Player.JumpPadEffects[Event Player.RemoveEffectsLoop]);
  • End;
  • Event Player.JumpPadLocations = Empty Array;
  • Event Player.JumpPadEffects = Empty Array;
  • }
  • }
  • disabled rule("Flight")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Disable flight after using it")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Disallow Button(Event Player, Ability 1);
  • Wait(0.230, Ignore Condition);
  • Allow Button(Event Player, Ability 1);
  • Wait(0.020, Ignore Condition);
  • Press Button(Event Player, Ability 1);
  • Wait(0.020, Ignore Condition);
  • Set Ability 1 Enabled(Event Player, False);
  • }
  • }
  • rule("Cheat control")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.650, Abort When False);
  • Small Message(Event Player, Custom String("It looks like you encountered a bug by spamming [Ability 1]. Sorry."));
  • Kill(Event Player, Null);
  • }
  • }
  • disabled rule("Beam - Grapple Hook")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Get position of grapple")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.GrapplePoint = Ray Cast Hit Position(Eye Position(Event Player), Eye Position(Event Player) + Facing Direction Of(
  • Event Player) * 200, Null, All Players(All Teams), False);
  • If(Distance Between(Position Of(Event Player), Event Player.GrapplePoint) <= 20);
  • Event Player.IsGrappling = True;
  • Create Beam Effect(All Players(All Teams), Good Beam, Event Player, Event Player.GrapplePoint, Sky Blue,
  • Visible To Position and Radius);
  • Event Player.GrappleEffect = Last Created Entity;
  • End;
  • }
  • }
  • rule("Is using Grapple")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.IsGrappling == True;
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Vector Towards(Position Of(Event Player), Event Player.GrapplePoint), Max(Min(Distance Between(
  • Position Of(Event Player), Event Player.GrapplePoint) / 7.500, 2), 1.500), To World, Incorporate Contrary Motion);
  • Wait(0.035, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Is no longer using Grapple")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) != True;
  • }
  • actions
  • {
  • Event Player.IsGrappling = False;
  • Destroy Effect(Event Player.GrappleEffect);
  • }
  • }
  • disabled rule("Misc stuff")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Reset yourself")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Reload) == True;
  • }
  • actions
  • {
  • Kill(Event Player, Null);
  • }
  • }
  • rule("Reset on death")
  • {
  • event
  • {
  • Player Died;
  • All;
  • All;
  • }
  • actions
  • {
  • Wait(0.016, Ignore Condition);
  • Set Status(Event Player, Null, Hacked, 0.250);
  • Wait(0.032, Ignore Condition);
  • Set Status(Event Player, Null, Hacked, 0.500);
  • Teleport(Event Player, Global.CheckpointPositions[Event Player.CurrentCheckpoint] + Vector(0, 0.250, 0));
  • Wait(0.032, Ignore Condition);
  • Call Subroutine(SetCurrentRingsArray);
  • If(Count Of(Event Player.CurrentCheckpointRingsArray) > 0);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Event Player.CurrentCheckpointRingsArray[0]), To World);
  • Else;
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player),
  • Global.CheckpointPositions[Event Player.CurrentCheckpoint + 1]), To World);
  • End;
  • Wait(0.250, Ignore Condition);
  • Resurrect(Event Player);
  • Wait(0.016, Ignore Condition);
  • Apply Impulse(Event Player, Down, 1, To Player, Cancel Contrary Motion);
  • Call Subroutine(ResetJumpPads);
  • Call Subroutine(SetAvailableAbilities);
  • }
  • }
  • rule("Full reset")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Interact) == True;
  • Is Button Held(Event Player, Ultimate) == True;
  • Is Button Held(Event Player, Crouch) == True;
  • }
  • actions
  • {
  • Event Player.CurrentCheckpoint = 0;
  • Event Player.Timer = 0;
  • Event Player.TimerChase = 0;
  • Kill(Event Player, Null);
  • }
  • }
  • rule("Last Checkpoint reached")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.CurrentCheckpoint + 1 == Count Of(Global.CheckpointPositions);
  • }
  • actions
  • {
  • Event Player.FinalTime = Event Player.Timer;
  • Event Player.TimerChase = Event Player.FinalTime;
  • If(Event Player.BestTime > 0);
  • Event Player.BestTime = Min(Event Player.FinalTime, Event Player.BestTime);
  • Else;
  • Event Player.BestTime = Event Player.FinalTime;
  • End;
  • Big Message(All Players(All Teams), Custom String("{0} Completed the course in {1}!", Event Player, Event Player.FinalTime));
  • Play Effect(All Players(All Teams), Good Explosion, Sky Blue, Event Player, 15);
  • Play Effect(All Players(All Teams), Good Explosion, Blue, Event Player, 10);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, White, Event Player, 100);
  • }
  • }
  • rule("Infinite match timer")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Match Time < 1800;
  • }
  • actions
  • {
  • Set Match Time(3599);
  • }
  • }
  • disabled rule("Disable inspector")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Disable Inspector Recording;
  • }
  • }
Join the Workshop.codes Discord