Return to post
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 Blizz World"
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 Blizz World"
}
lobby
{
Allow Players Who Are In Queue: Yes
}
modes
{
Skirmish
{
enabled maps
{
Blizzard World
}
}
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: Medium {0}", Icon String(Warning)), Null, Right, 1, White,
Orange, 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 2nd checkpoint, explaining Jump pads"
Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.CurrentCheckpoint == 1), Custom String(
"{0} Press [Secondary fire] to spawn jump pads on location of bombs", 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 grapple"
Create In-World Text(Filtered Array(All Players(All Teams), Current Array Element.CurrentCheckpoint == 2), Custom String(
"{0} Press [Ability 2] to grapple, Press again to let go early", 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, False);
Set Secondary Fire Enabled(Event Player, True);
Else If(Event Player.CurrentCheckpoint == 2);
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 == 3);
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 == 4);
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 == 5);
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 == 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, True);
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, False);
Set Ability 2 Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, True);
Else If(Event Player.CurrentCheckpoint == 10);
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 == 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, False);
Set Ability 2 Enabled(Event Player, True);
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, False);
Else If(Event Player.CurrentCheckpoint == 15);
Set Ability 1 Enabled(Event Player, True);
Set Ability 2 Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, True);
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(2.947, 1.599, 11.921));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
"--- Statue"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(3.297, 5.299, 41.802));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3.850);
"--- First control point"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(2.948, 3.599, 74.192));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
"--- At tank"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-26.488, 7.701, 87.481));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
"--- First bridge, upper entrance"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-63.110, 8.269, 80.420));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
"--- Second control point"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-54.107, 1.305, 110.376));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
"--- After pit near last control point"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-110.260, -2.548, 113.069));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
"--- Exit of last defenders spawn"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-141.306, 2.452, 104.917));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3.500);
"--- Balcony area half way through last control point"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-111.281, 6.446, 146.319));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 4.500);
"--- Above payload spawn"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(5.829, 7.722, 86.132));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3);
"--- Flower fontain at attacker spawn"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(3.028, -0.102, -6.994));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.750);
"--- Above Mike Morhaime"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-77.278, 6.574, 66.153));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3);
"--- Second bridge bridge on way to second control point"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-62.731, 7.243, 101.033));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
"--- Under second bridge bridge on way to second control point"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-61.445, 1.305, 100.506));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
"--- Water side near mr. Shark"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-18.564, 1.990, 112.210));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 2.500);
"--- Flight to Duskwood"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-8.276, 7.764, 52.207));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3);
"--- Final control point"
Global.CheckpointPositions = Append To Array(Global.CheckpointPositions, Vector(-122.052, 1.546, 110.544));
Global.CheckpointRadius = Append To Array(Global.CheckpointRadius, 3.150);
}
}
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);
}
}
rule("Disable jumping for specific checkpoint")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.CurrentCheckpoint == 12;
}
actions
{
Disallow Button(Event Player, Jump);
}
}
rule("Enable jumping for non-specific checkpoints")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Event Player.CurrentCheckpoint != 12;
}
actions
{
Allow Button(Event Player, Jump);
}
}
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(-71.538, 5.299, 125.205));
"------------------------"
Global.RingPositions = Append To Array(Global.RingPositions, 6);
Global.RingPositions = Append To Array(Global.RingPositions, Vector(-122.073, 6.547, 110.555));
"------------------------"
Global.RingPositions = Append To Array(Global.RingPositions, 8);
Global.RingPositions = Append To Array(Global.RingPositions, Vector(-61.614, 14.499, 118.687));
"------------------------"
Global.RingPositions = Append To Array(Global.RingPositions, 10);
Global.RingPositions = Append To Array(Global.RingPositions, Vector(3, 6.604, 28.235));
Global.RingPositions = Append To Array(Global.RingPositions, Vector(3, 15.302, 43.733));
Global.RingPositions = Append To Array(Global.RingPositions, Vector(-17.081, 17, 73.483));
Global.RingPositions = Append To Array(Global.RingPositions, Vector(-47.842, 2.494, 63.699));
"------------------------"
Global.RingPositions = Append To Array(Global.RingPositions, 14);
Global.RingPositions = Append To Array(Global.RingPositions, Vector(4.751, 17.730, 132.878));
Global.RingPositions = Append To Array(Global.RingPositions, Vector(29.246, 15.927, 110.057));
Global.RingPositions = Append To Array(Global.RingPositions, Vector(18.788, 10.699, 78.598));
}
}
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);
Teleport(Event Player, Global.CheckpointPositions[Event Player.CurrentCheckpoint] + Vector(0, 0.250, 0));
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;
Resurrect(Event Player);
Wait(0.020, Ignore Condition);
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);
}
}
rule("Disable inspector")
{
event
{
Ongoing - Global;
}
actions
{
Disable Inspector Recording;
}
}