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.2 - Rialto"
}
lobby
{
Allow Players Who Are In Queue: Yes
Max Team 1 Players: 12
Max Team 2 Players: 0
}
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("Map difficulty: Easy {0}", Icon String(Happy)), Null, Right, 1, Color(White),
Color(Green), Color(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);
Global.CheckpointPositions) - 1, Icon String(Flag)), Null, Right, 2, Color(White), Color(Turquoise), Color(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);
Create HUD Text(Event Player, Null, Custom String("Timer: {0}", Event Player.Timer), Null, Top, 5, Color(White), Color(White),
Color(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;
(Is Using Ability 1(Event Player) || Is Using Ability 2(Event Player) || Is Button Held(Event Player, Button(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(" "), Null, Left, 0, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(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);
Null, Left, 0, Color(White), Color(Blue), Color(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;
Is Button Held(Event Player, Button(Interact)) == True;
Event Player.InstructionsShown == False;
}
actions
{
Disallow Button(Event Player, Interact);
Disallow Button(Event Player, Button(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);
Color(White), Color(White), Color(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);
"Pressing [Ability 2] will attach a grappling hook to a surface (20 meters range)."), Null, Left, 2, Color(White), Color(
White), Color(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);
"Pressing [Secondary fire] will spawn jump pads on the location of each sticky bomb."), Null, Left, 3, Color(White), Color(
White), Color(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);
Color(White), Color(White), Color(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);
Color(White), Color(Yellow), Color(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);
Create HUD Text(Event Player, Null, Custom String("Press [Reload] for a quick reset."), Null, Left, 6, Color(White), Color(Aqua),
Color(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);
Null, Left, 7, Color(White), Color(Orange), Color(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);
Allow Button(Event Player, Button(Interact));
}
}
rule("Pressing interact to hide controls")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Interact) == True;
Is Button Held(Event Player, Button(Interact)) == True;
Event Player.InstructionsShown == True;
}
actions
{
Disallow Button(Event Player, Interact);
Disallow Button(Event Player, Button(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);
Allow Button(Event Player, Button(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);
Do Not Clip, Visible To Position and String, Color(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);
Global.CheckpointPositions[2] + Vector(0, -2, 0), 1, Do Not Clip, Visible To Position and String, Color(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);
Global.CheckpointPositions[3] + Vector(0, -2, 0), 1, Do Not Clip, Visible To Position and String, Color(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);
Visible To Position and String, Color(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);
Event Player.FinalTime), Null, Top, 1, Color(White), Color(Orange), Color(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);
Event Player.BestTime), Null, Top, 2, Color(White), Color(Turquoise), Color(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),
Create Effect(Event Player, Ring, Color(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),
Create Effect(Event Player, Ring, Color(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);
Visible To and Position, Color(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);
Play Effect(Event Player, Buff Impact Sound, Color(White), Event Player, 100);
Play Effect(All Players(All Teams), Good Explosion, Color(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,
Create Effect(Filtered Array(Event Player, Count Of(Event Player.CurrentCheckpointRingsArray) > 0), Good Aura, Color(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,
Create Effect(Filtered Array(Event Player, Count Of(Event Player.CurrentCheckpointRingsArray) > 0), Good Aura, Color(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,
Create Effect(Filtered Array(Event Player, Count Of(Event Player.CurrentCheckpointRingsArray) > 0), Good Aura, Color(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,
Create Effect(Filtered Array(Event Player, Count Of(Event Player.CurrentCheckpointRingsArray) > 0), Good Aura, Color(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);
Play Effect(Event Player, Ring Explosion Sound, Color(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);
Create Effect(Event Player, Sphere, Color(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);
Create Effect(Event Player, Sphere, Color(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);
Create Effect(Event Player, Sphere, Color(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);
Create Effect(Event Player, Sphere, Color(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);
Create Effect(Event Player, Sphere, Color(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);
Create Effect(Event Player, Sphere, Color(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);
Play Effect(Event Player, Explosion Sound, Color(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);
Disallow Button(Event Player, Button(Ability 1));
Wait(0.230, Ignore Condition);
Allow Button(Event Player, Ability 1);
Allow Button(Event Player, Button(Ability 1));
Wait(0.020, Ignore Condition);
Press Button(Event Player, Ability 1);
Press Button(Event Player, Button(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,
Create Beam Effect(All Players(All Teams), Good Beam, Event Player, Event Player.GrapplePoint, Color(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;
Is Button Held(Event Player, Button(Reload)) == True;
}
actions
{
Kill(Event Player, Null);
}
}
rule("Reset on death")
{
event
{
Player Died;
All;
All;
}
actions
{
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;
Is Button Held(Event Player, Button(Interact)) == True;
Is Button Held(Event Player, Button(Ultimate)) == True;
Is Button Held(Event Player, Button(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);
Play Effect(All Players(All Teams), Good Explosion, Color(Sky Blue), Event Player, 15);
Play Effect(All Players(All Teams), Good Explosion, Color(Blue), Event Player, 10);
Play Effect(All Players(All Teams), Buff Explosion Sound, Color(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;
}
}