Return to post
settings
{
main
{
Description: "Overwatch Volleyball by Caldoran"
Description: "Version 1.20\n\r\nLucio-only.\r\n\r\nKnock Hammond onto your opponent's floor\r\nto score a point.\r\n\r\nIf Hammond hits the net or he lands on\r\nyour side after you boop him, you get a\r\nFoul instead.\r\n\r\nCustomise everything in Workshop Settings!"
Mode Name: "Volleyball"
}
lobby
{
Allow Players Who Are In Queue: Yes
Map Rotation: Paused
Match Voice Chat: Enabled
Max FFA Players: 10
Max Spectators: 12
Return To Lobby: After A Game
Swap Teams After Match: No
}
modes
{
Deathmatch
{
Game Length In Minutes: 15
Score To Win: 50
Self Initiated Respawn: Off
enabled maps
{
Workshop Chamber
Workshop Chamber 0
}
}
disabled Elimination
{
Capture Objective Tiebreaker: Off
Draw After Match Time Elapsed With No Tiebreaker: 300
Hero Selection: Random
Reveal Heroes After Match Time Elapsed: 180
Score To Win: 5
Tiebreaker After Match Time Elapsed: 300
Time To Capture: 7
}
General
{
Allow Hero Switching: Off
Enemy Health Bars: Off
Game Mode Start: Immediately
Hero Limit: Off
Kill Cam: Off
Kill Feed: Off
Respawn As Random Hero: On
}
}
heroes
{
General
{
Infinite Ultimate Duration: On
Lúcio
{
Crossfade: Off
Primary Fire: Off
Receive Headshots Only: On
Soundwave Cooldown Time: 25%
Soundwave Knockback Scalar: 150%
Soundwave Knockback Scalar: 210%
Ultimate Generation - Combat Sound Barrier: 0%
}
Wrecking Ball
{
Adaptive Shield: Off
Grappling Claw: Off
Piledriver: Off
Quick Melee: Off
Roll Always Active: On
Ultimate Ability Minefield: Off
}
enabled heroes
{
Lúcio
}
}
}
}
variables
{
global:
0: NetHeight
1: OutOfBounds
2: BallSpawnHeight
3: LastAttacker
4: LastBallCircle
5: LastHitPosition
6: ScoreToWin
7: PenaltyFreezeTime
8: CurrentRound
9: BallRespawnTime
10: EnablePlayerOutOfBounds
11: SpawnSide
12: LOSAngle
13: UltimateSlowdownScale
14: UltChargePerBallHit
15: BallScale
16: BallGravity
21: RedScores
22: RedFouls
23: BlueScores
24: BlueFouls
25: BallReference
player:
0: IsUsingUltimate
1: Scores
2: Fouls
3: CurrentPlayerSide
4: HaveLOSToBall
}
rule("Set Parameters")
{
event
{
Ongoing - Global;
}
actions
{
Global.NetHeight = Workshop Setting Real(Custom String("Field Parameters"), Custom String("Net Height"), 3, 1, 50);
Global.NetHeight = Workshop Setting Real(Custom String("Field Parameters"), Custom String("Net Height"), 3, 1, 50, 0);
Global.OutOfBounds = Workshop Setting Real(Custom String("Field Parameters"), Custom String("Out of Bounds Distance from Center"),
20, 0, 1000);
Global.BallScale = Workshop Setting Real(Custom String("Ball Parameters"), Custom String("Ball Size Scale"), 1, 0, 15);
Global.BallSpawnHeight = Workshop Setting Real(Custom String("Ball Parameters"), Custom String("Ball Respawn Height"), 10, 0, 100);
20, 0, 1000, 0);
Global.BallScale = Workshop Setting Real(Custom String("Ball Parameters"), Custom String("Ball Size Scale"), 1, 0, 15, 0);
Global.BallSpawnHeight = Workshop Setting Real(Custom String("Ball Parameters"), Custom String("Ball Respawn Height"), 10, 0, 100,
0);
Global.BallRespawnTime = Workshop Setting Integer(Custom String("Ball Parameters"), Custom String("Ball Respawn Time in Seconds"),
3, 0, 20);
3, 0, 20, 0);
Global.BallGravity = Workshop Setting Integer(Custom String("Ball Parameters"), Custom String("Ball Gravity Percentage"), 150, 0,
500);
500, 0);
Global.EnablePlayerOutOfBounds = Workshop Setting Toggle(Custom String("Match Parameters"), Custom String(
"Enable Player Out of Bounds Penalty"), False);
Global.ScoreToWin = Workshop Setting Integer(Custom String("Match Parameters"), Custom String("Score to Win"), 10, 1, 100);
"Enable Player Out of Bounds Penalty"), False, 0);
Global.ScoreToWin = Workshop Setting Integer(Custom String("Match Parameters"), Custom String("Score to Win"), 10, 1, 100, 0);
Global.PenaltyFreezeTime = Workshop Setting Integer(Custom String("Match Parameters"), Custom String(
"Penalty Freeze Time in Seconds"), 3, 0, 50);
"Penalty Freeze Time in Seconds"), 3, 0, 50, 0);
Global.UltimateSlowdownScale = Workshop Setting Real(Custom String("Player Parameters"), Custom String(
"Ultimate Slowdown Scale Percentage"), 30, 10, 100);
"Ultimate Slowdown Scale Percentage"), 30, 10, 100, 0);
Global.UltChargePerBallHit = Workshop Setting Real(Custom String("Player Parameters"), Custom String("Ultimate Charge Per Hit"),
10, 0, 100);
10, 0, 100, 0);
Global.LOSAngle = 45;
Global.SpawnSide = Random Integer(1, 2) * 2 - 3;
Global.CurrentRound = 1;
}
}
rule("Remove Setup")
{
event
{
Ongoing - Global;
}
conditions
{
Is Assembling Heroes == True;
}
actions
{
Set Match Time(0);
}
}
rule("Disable Mode Scoring")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
}
actions
{
Disable Built-In Game Mode Completion;
Disable Built-In Game Mode Scoring;
Disable Built-In Game Mode Announcer;
Disable Built-In Game Mode Music;
Set Match Time(0);
}
}
rule("Player Joins")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Is Alive(Event Player) == True;
}
actions
{
Set Move Speed(Event Player, Workshop Setting Real(Custom String("Player Parameters"), Custom String("Move Speed Percentage"), 150,
0, 500));
0, 500, 0));
Set Jump Vertical Speed(Event Player, Workshop Setting Real(Custom String("Player Parameters"), Custom String(
"Jump Vertical Speed Percentage"), 300, 0, 1000));
Disallow Button(Event Player, Ultimate);
Disallow Button(Event Player, Melee);
"Jump Vertical Speed Percentage"), 300, 0, 1000, 0));
Disallow Button(Event Player, Button(Ultimate));
Disallow Button(Event Player, Button(Melee));
Disable Game Mode In-World UI(Event Player);
Disable Game Mode HUD(Event Player);
Disable Kill Feed(Event Player);
Disable Scoreboard(Event Player);
Disable Nameplates(Global.BallReference, Event Player);
}
}
rule("HUD Score (Round and Teams)")
{
event
{
Ongoing - Global;
}
actions
{
Create HUD Text(All Players(All Teams), Null, Custom String("Overwatch Volleyball"), Null, Left, -4, White, Lime Green, White,
Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), String("{0} {1}", String("Round"), Global.CurrentRound), Null, Null, Left, -3, Lime Green,
White, White, Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Custom String("Overwatch Volleyball"), Null, Left, -4, Color(White), Color(
Lime Green), Color(White), Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), String("{0} {1}", String("Round"), Global.CurrentRound), Null, Null, Left, -3, Color(
Lime Green), Color(White), Color(White), Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, String("{0} {1}", Custom String("First to"), Global.ScoreToWin), Left, -2,
White, White, Lime Green, Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, Custom String(" "), Left, -1.500, White, White, White, Visible To and String,
Default Visibility);
Color(White), Color(White), Color(Lime Green), Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, Custom String(" "), Left, -1.500, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Custom String(" Red "), String("{0} {1}", Global.RedScores + Global.BlueFouls, String(
"Points")), String("{0} - {1}", Global.RedScores, Global.RedFouls), Left, -1, Red, Red, Red, Visible To and String,
Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, Custom String(" "), Left, 0, White, White, White, Visible To and String,
Default Visibility);
"Points")), String("{0} - {1}", Global.RedScores, Global.RedFouls), Left, -1, Color(Red), Color(Red), Color(Red),
Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Null, Null, Custom String(" "), Left, 0, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Custom String("Blue"), String("{0} {1}", Global.BlueScores + Global.RedFouls, String(
"Points")), String("{0} - {1}", Global.BlueScores, Global.BlueFouls), Left, 1, Blue, Blue, Blue, Visible To and String,
Default Visibility);
"Points")), String("{0} - {1}", Global.BlueScores, Global.BlueFouls), Left, 1, Color(Blue), Color(Blue), Color(Blue),
Visible To and String, Default Visibility);
disabled Create HUD Text(All Players(All Teams), Max(Global.RedScores + Global.BlueFouls, 0), Custom String("Red Team"), String("{0} - {1}",
Global.RedScores, Global.RedFouls), Left, -1, Red, Red, Red, Visible To and String, Default Visibility);
Global.RedScores, Global.RedFouls), Left, -1, Color(Red), Color(Red), Color(Red), Visible To and String, Default Visibility);
disabled Create HUD Text(All Players(All Teams), Max(Global.BlueScores + Global.RedFouls, 0), Custom String("Blue Team"), String(
"{0} - {1}", Global.BlueScores, Global.BlueFouls), Left, 1, Blue, Blue, Blue, Visible To and String, Default Visibility);
"{0} - {1}", Global.BlueScores, Global.BlueFouls), Left, 1, Color(Blue), Color(Blue), Color(Blue), Visible To and String,
Default Visibility);
}
}
rule("HUD Score (Players)")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
actions
{
Create HUD Text(All Players(All Teams), Hero Icon String(Hero(Lúcio)), Event Player, String("{0} - {1}", Event Player.Scores,
Event Player.Fouls), Left, Event Player.CurrentPlayerSide + (1 + Max(0, Event Player.Scores - Event Player.Fouls)) * 0.001,
Lime Green, Lime Green, Lime Green, Visible To Sort Order and String, Default Visibility);
Color(Lime Green), Color(Lime Green), Color(Lime Green), Visible To Sort Order and String, Default Visibility);
disabled Create HUD Text(All Players(All Teams), Max(0, Event Player.Scores - Event Player.Fouls), Event Player, String("{0} - {1}",
Event Player.Scores, Event Player.Fouls), Left, Event Player.CurrentPlayerSide + (1 + Max(0,
Event Player.Scores - Event Player.Fouls)) * 0.100, Lime Green, Lime Green, Lime Green, Visible To Sort Order and String,
Default Visibility);
Event Player.Scores - Event Player.Fouls)) * 0.100, Color(Lime Green), Color(Lime Green), Color(Lime Green),
Visible To Sort Order and String, Default Visibility);
}
}
rule("Create Out-of-Bounds Indicator")
{
event
{
Ongoing - Global;
}
actions
{
Create Beam Effect(All Players(All Teams), Bad Beam, Vector(Global.OutOfBounds * -1, 0.500, Global.OutOfBounds * -1), Vector(
Global.OutOfBounds * -1, 0.500, Global.OutOfBounds * 1), Red, Visible To Position and Radius);
Global.OutOfBounds * -1, 0.500, Global.OutOfBounds * 1), Color(Red), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Bad Beam, Vector(Global.OutOfBounds * 1, 0.500, Global.OutOfBounds * -1), Vector(
Global.OutOfBounds * 1, 0.500, Global.OutOfBounds * 1), Blue, Visible To Position and Radius);
Global.OutOfBounds * 1, 0.500, Global.OutOfBounds * 1), Color(Blue), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Bad Beam, Vector(Global.OutOfBounds * -1, 0.500, Global.OutOfBounds * -1), Vector(
Global.OutOfBounds * 0, 0.500, Global.OutOfBounds * -1), Red, Visible To Position and Radius);
Global.OutOfBounds * 0, 0.500, Global.OutOfBounds * -1), Color(Red), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Bad Beam, Vector(Global.OutOfBounds * 1, 0.500, Global.OutOfBounds * 1), Vector(
Global.OutOfBounds * 0, 0.500, Global.OutOfBounds * 1), Blue, Visible To Position and Radius);
Global.OutOfBounds * 0, 0.500, Global.OutOfBounds * 1), Color(Blue), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Bad Beam, Vector(Global.OutOfBounds * -1, 0.500, Global.OutOfBounds * 1), Vector(
Global.OutOfBounds * 0, 0.500, Global.OutOfBounds * 1), Red, Visible To Position and Radius);
Global.OutOfBounds * 0, 0.500, Global.OutOfBounds * 1), Color(Red), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Bad Beam, Vector(Global.OutOfBounds * 1, 0.500, Global.OutOfBounds * -1), Vector(
Global.OutOfBounds * 0, 0.500, Global.OutOfBounds * -1), Blue, Visible To Position and Radius);
Global.OutOfBounds * 0, 0.500, Global.OutOfBounds * -1), Color(Blue), Visible To Position and Radius);
}
}
rule("Create Net")
{
event
{
Ongoing - Global;
}
actions
{
Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, Global.NetHeight, Global.OutOfBounds), Vector(0, Global.NetHeight,
Global.OutOfBounds * -1), Aqua, Visible To Position and Radius);
Global.OutOfBounds * -1), Color(Aqua), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, Global.NetHeight, Global.OutOfBounds * 1), Vector(0.001, 0,
Global.OutOfBounds), Aqua, Visible To Position and Radius);
Global.OutOfBounds), Color(Aqua), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, Global.NetHeight, Global.OutOfBounds * -1), Vector(-0.001, 0,
Global.OutOfBounds * -1), Aqua, Visible To Position and Radius);
Global.OutOfBounds * -1), Color(Aqua), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, Global.NetHeight * 0.500, Global.OutOfBounds), Vector(0,
Global.NetHeight * 0.500, Global.OutOfBounds * -1), Aqua, Visible To Position and Radius);
Global.NetHeight * 0.500, Global.OutOfBounds * -1), Color(Aqua), Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0, Global.OutOfBounds), Vector(0, 0, Global.OutOfBounds * -1),
Aqua, Visible To Position and Radius);
Color(Aqua), Visible To Position and Radius);
}
}
rule("Player Dies")
{
event
{
Player Died;
All;
Lúcio;
}
actions
{
Small Message(All Players(All Teams), String("{0} {1} {2}", Icon String(Skull), Event Player, Custom String("Died!")));
Play Effect(All Players(All Teams), Bad Explosion, Aqua, Event Player, 15);
Play Effect(All Players(All Teams), Explosion Sound, Aqua, Event Player, 100);
Play Effect(All Players(All Teams), Bad Explosion, Color(Aqua), Event Player, 15);
Play Effect(All Players(All Teams), Explosion Sound, Color(Aqua), Event Player, 100);
Resurrect(Event Player);
Apply Impulse(Event Player, Up, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Down, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Left, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Right, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Forward, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Backward, -0.001, To Player, Cancel Contrary Motion);
Teleport(Event Player, Vector(Global.OutOfBounds * Event Player.CurrentPlayerSide * 0.500, 0, 0));
Set Status(Event Player, Null, Frozen, Global.PenaltyFreezeTime);
}
}
rule("Player Crosses Net")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Round To Integer(X Component Of(Position Of(Event Player)), To Nearest) == 0;
Round To Integer(X Component Of(Position Of(Event Player)), Down) == 0;
Global.LastAttacker != Null;
}
actions
{
Small Message(All Players(All Teams), String("{0} {1} {2}", Icon String(Stop), Event Player, Custom String("Crossed the Net!")));
Play Effect(All Players(All Teams), Bad Explosion, Aqua, Event Player, 15);
Play Effect(All Players(All Teams), Bad Explosion, Color(Aqua), Event Player, 15);
Apply Impulse(Event Player, Up, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Down, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Left, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Right, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Forward, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Backward, -0.001, To Player, Cancel Contrary Motion);
Play Effect(All Players(All Teams), Debuff Impact Sound, Aqua, Event Player, 100);
Play Effect(All Players(All Teams), Debuff Impact Sound, Color(Aqua), Event Player, 100);
Set Status(Event Player, Null, Frozen, Global.PenaltyFreezeTime);
Teleport(Event Player, Vector(Global.OutOfBounds * Event Player.CurrentPlayerSide * 0.500, 0, 0));
}
}
rule("Player Out of Bounds")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Global.EnablePlayerOutOfBounds == True;
(X Component Of(Position Of(Event Player)) > Global.OutOfBounds || X Component Of(Position Of(Event Player))
< Global.OutOfBounds * -1 || Z Component Of(Position Of(Event Player)) > Global.OutOfBounds || Z Component Of(Position Of(
Event Player)) < Global.OutOfBounds * -1) == True;
}
actions
{
Small Message(All Players(All Teams), Custom String("Warning: Out of Bounds"));
Wait(1, Abort When False);
Small Message(All Players(All Teams), String("{0} {1} {2}", Icon String(Stop), Event Player, Custom String("Out of Bounds!")));
Play Effect(All Players(All Teams), Bad Explosion, Aqua, Event Player, 15);
Play Effect(All Players(All Teams), Bad Explosion, Color(Aqua), Event Player, 15);
Apply Impulse(Event Player, Up, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Down, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Left, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Right, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Forward, -0.001, To Player, Cancel Contrary Motion);
Apply Impulse(Event Player, Backward, -0.001, To Player, Cancel Contrary Motion);
Play Effect(All Players(All Teams), Debuff Impact Sound, Aqua, Event Player, 100);
Play Effect(All Players(All Teams), Debuff Impact Sound, Color(Aqua), Event Player, 100);
Set Status(Event Player, Null, Frozen, Global.PenaltyFreezeTime);
Teleport(Event Player, Vector(Global.OutOfBounds * Event Player.CurrentPlayerSide * 0.500, 0, 0));
}
}
rule("Player Changes Side (to Red)")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
X Component Of(Position Of(Event Player)) < -0.500;
Round To Integer(X Component Of(Position Of(Event Player)), To Nearest) < 0;
Global.LastAttacker == Null;
Event Player.CurrentPlayerSide != -1;
}
actions
{
Event Player.CurrentPlayerSide = -1;
Small Message(All Players(All Teams), String("{0} {1} {2}", Icon String(Recycle), Event Player, Custom String(
"Changed Side to Red!")));
}
}
rule("Player Changes Side (to Blue)")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
X Component Of(Position Of(Event Player)) > 0.500;
Round To Integer(X Component Of(Position Of(Event Player)), To Nearest) > 0;
Global.LastAttacker == Null;
Event Player.CurrentPlayerSide != 1;
}
actions
{
Event Player.CurrentPlayerSide = 1;
Small Message(All Players(All Teams), String("{0} {1} {2}", Icon String(Recycle), Event Player, Custom String(
"Changed Side to Blue!")));
}
}
rule("Player LOS Check (True)")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is In View Angle(Event Player, Global.BallReference, Global.LOSAngle) == True;
}
actions
{
Event Player.HaveLOSToBall = True;
}
}
rule("Player LOS Check (False)")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is In View Angle(Event Player, Global.BallReference, Global.LOSAngle) == False;
}
actions
{
Event Player.HaveLOSToBall = False;
}
}
rule("Spawn Ball")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
}
actions
{
Create Dummy Bot(Hero(Wrecking Ball), All Teams, 11, Vector(Global.SpawnSide * Global.OutOfBounds * 0.500, Global.BallSpawnHeight,
0), Null);
Global.BallReference = Last Created Entity;
Start Scaling Player(Global.BallReference, Global.BallScale, False);
Set Gravity(Global.BallReference, Global.BallGravity);
Start Modifying Hero Voice Lines(Global.BallReference, Global.BallScale, False);
Disable Built-In Game Mode Respawning(Global.BallReference);
Disable Nameplates(Global.BallReference, All Players(All Teams));
Start Heal Over Time(Global.BallReference, Null, 9999, 600);
Create Icon(Filtered Array(All Players(All Teams), Current Array Element.HaveLOSToBall == False), Global.BallReference, Circle,
Visible To and Position, Lime Green, True);
Visible To and Position, Color(Lime Green), True);
}
}
rule("Ball Touches Floor (Score)")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Y Component Of(Position Of(Event Player)) == 0;
(X Component Of(Position Of(Event Player)) > Global.OutOfBounds || X Component Of(Position Of(Event Player))
< Global.OutOfBounds * -1 || Z Component Of(Position Of(Event Player)) > Global.OutOfBounds || Z Component Of(Position Of(
Event Player)) < Global.OutOfBounds * -1) == False;
((X Component Of(Global.LastHitPosition) > 0 && X Component Of(Position Of(Event Player)) > 0) || (X Component Of(
Global.LastHitPosition) < 0 && X Component Of(Position Of(Event Player)) < 0)) == False;
Global.LastAttacker != Null;
}
actions
{
Big Message(All Players(All Teams), String("{0} {1} {2}", Icon String(Warning), Global.LastAttacker, Custom String("Scored!")));
Global.LastAttacker.Scores += 1;
Kill(Event Player, Null);
Play Effect(All Players(All Teams), Good Explosion, Green, Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(
Position Of(Event Player))), 10);
Play Effect(All Players(All Teams), Good Explosion, Color(Green), Vector(X Component Of(Position Of(Event Player)), 0,
Z Component Of(Position Of(Event Player))), 10);
Destroy Effect(Global.LastBallCircle);
Create Effect(All Players(All Teams), Cloud, Lime Green, Position Of(Event Player), 1, None);
Create Effect(All Players(All Teams), Cloud, Color(Lime Green), Position Of(Event Player), 1, None);
Global.LastBallCircle = Last Created Entity;
If(X Component Of(Global.LastHitPosition) < 0);
Global.RedScores += 1;
Global.SpawnSide = 1;
Else;
Global.BlueScores += 1;
Global.SpawnSide = -1;
End;
Modify Player Score(Global.LastAttacker, 1);
}
}
rule("Ball Touches Floor (Out of Bounds)")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Y Component Of(Position Of(Event Player)) <= 0;
(X Component Of(Position Of(Event Player)) > Global.OutOfBounds || X Component Of(Position Of(Event Player))
< Global.OutOfBounds * -1 || Z Component Of(Position Of(Event Player)) > Global.OutOfBounds || Z Component Of(Position Of(
Event Player)) < Global.OutOfBounds * -1) == True;
Global.LastAttacker != Null;
}
actions
{
Big Message(All Players(All Teams), String("{0} {1} {2}", Icon String(No), Global.LastAttacker, Custom String("Out of Bounds!")));
Global.LastAttacker.Fouls += 1;
Kill(Event Player, Null);
Play Effect(All Players(All Teams), Bad Explosion, Red, Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(
Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(
Position Of(Event Player))), 10);
Destroy Effect(Global.LastBallCircle);
Create Effect(All Players(All Teams), Cloud, Red, Position Of(Event Player), 1, None);
Create Effect(All Players(All Teams), Cloud, Color(Red), Position Of(Event Player), 1, None);
Global.LastBallCircle = Last Created Entity;
If(X Component Of(Global.LastHitPosition) < 0);
Global.RedFouls += 1;
Global.SpawnSide = -1;
Else;
Global.BlueFouls += 1;
Global.SpawnSide = 1;
End;
Modify Player Score(Global.LastAttacker, -1);
}
}
rule("Ball Touches Floor (Same Side Foul)")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Y Component Of(Position Of(Event Player)) == 0;
Is On Ground(Event Player) == True;
(X Component Of(Position Of(Event Player)) > Global.OutOfBounds || X Component Of(Position Of(Event Player))
< Global.OutOfBounds * -1 || Z Component Of(Position Of(Event Player)) > Global.OutOfBounds || Z Component Of(Position Of(
Event Player)) < Global.OutOfBounds * -1) == False;
((X Component Of(Global.LastHitPosition) > 0 && X Component Of(Position Of(Event Player)) > 0) || (X Component Of(
Global.LastHitPosition) < 0 && X Component Of(Position Of(Event Player)) < 0)) == True;
Global.LastAttacker != Null;
}
actions
{
Big Message(All Players(All Teams), String("{0} {1} {2}", Icon String(No), Global.LastAttacker, Custom String("Same Side Foul!")));
Global.LastAttacker.Fouls += 1;
Kill(Event Player, Null);
Play Effect(All Players(All Teams), Bad Explosion, Red, Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(
Play Effect(All Players(All Teams), Bad Explosion, Color(Red), Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(
Position Of(Event Player))), 10);
Destroy Effect(Global.LastBallCircle);
Create Effect(All Players(All Teams), Cloud, Red, Position Of(Event Player), 1, None);
Create Effect(All Players(All Teams), Cloud, Color(Red), Position Of(Event Player), 1, None);
Global.LastBallCircle = Last Created Entity;
If(X Component Of(Global.LastHitPosition) < 0);
Global.RedFouls += 1;
Global.SpawnSide = -1;
Else;
Global.BlueFouls += 1;
Global.SpawnSide = 1;
End;
Modify Player Score(Global.LastAttacker, -1);
}
}
rule("Ball Hits Net (Net Foul)")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Round To Integer(X Component Of(Position Of(Event Player)), To Nearest) == 0;
Round To Integer(Absolute Value(X Component Of(Position Of(Event Player))), Down) == 0;
Y Component Of(Position Of(Event Player)) <= Global.NetHeight;
Global.LastAttacker != Null;
}
actions
{
Big Message(All Players(All Teams), String("{0} {1} {2}", Icon String(No), Global.LastAttacker, Custom String("Net Foul!")));
Global.LastAttacker.Fouls += 1;
Kill(Event Player, Null);
Play Effect(All Players(All Teams), Bad Explosion, Aqua, Event Player, 10);
Play Effect(All Players(All Teams), Bad Explosion, Color(Aqua), Event Player, 10);
Destroy Effect(Global.LastBallCircle);
Create Effect(All Players(All Teams), Cloud, Aqua, Position Of(Event Player), 1, None);
Create Effect(All Players(All Teams), Cloud, Color(Aqua), Position Of(Event Player), 1, None);
Global.LastBallCircle = Last Created Entity;
If(X Component Of(Global.LastHitPosition) < 0);
Global.RedFouls += 1;
Global.SpawnSide = -1;
Else;
Global.BlueFouls += 1;
Global.SpawnSide = 1;
End;
Modify Player Score(Global.LastAttacker, -1);
}
}
rule("Ball Hit")
{
event
{
Player Took Damage;
All;
Wrecking Ball;
}
actions
{
Global.LastHitPosition = Position Of(Attacker);
If(Global.LastAttacker != Attacker);
Set Ultimate Charge(Attacker, Ultimate Charge Percent(Attacker) + Global.UltChargePerBallHit);
End;
Wait(0.048, Ignore Condition);
Global.LastAttacker = Attacker;
}
}
rule("Ball Dies")
{
event
{
Player Died;
All;
Wrecking Ball;
}
actions
{
Global.LastAttacker = Null;
}
}
rule("Ball Respawn")
{
event
{
Player Died;
All;
Wrecking Ball;
}
conditions
{
Global.RedScores + Global.BlueFouls < Global.ScoreToWin;
Global.BlueScores + Global.RedFouls < Global.ScoreToWin;
}
actions
{
Wait(Global.BallRespawnTime, Ignore Condition);
Resurrect(Event Player);
Teleport(Event Player, Vector(Global.SpawnSide * Global.OutOfBounds * 0.500, Global.BallSpawnHeight, 0));
Start Heal Over Time(Event Player, Null, 9999, 600);
Global.CurrentRound += 1;
If(Global.RedScores + Global.BlueFouls >= Global.ScoreToWin - 1 || Global.BlueScores + Global.RedFouls >= Global.ScoreToWin - 1);
Big Message(All Players(All Teams), String("{0} {1}", Icon String(Warning), Custom String("Match Point!")));
End;
}
}
rule("Ball Trail (Normal)")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Global.LastAttacker != Null;
Global.LastAttacker.IsUsingUltimate != True;
Is In Air(Event Player) == True;
}
actions
{
Play Effect(All Players(All Teams), Good Explosion, Lime Green, Event Player, 0.050);
Play Effect(All Players(All Teams), Good Explosion, Color(Lime Green), Event Player, 0.050);
Wait(0.016, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Ball Trail (Ultimate)")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Global.LastAttacker != Null;
Global.LastAttacker.IsUsingUltimate == True;
Is In Air(Event Player) == True;
}
actions
{
Play Effect(All Players(All Teams), Bad Pickup Effect, Lime Green, Event Player, 1);
Play Effect(All Players(All Teams), Bad Pickup Effect, Color(Lime Green), Event Player, 1);
Wait(0.016, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Player Activate Ultimate")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Is Button Held(Event Player, Ultimate) == True;
Is Button Held(Event Player, Button(Ultimate)) == True;
Ultimate Charge Percent(Event Player) == 100;
}
actions
{
Set Ultimate Charge(Event Player, 0);
Event Player.IsUsingUltimate = True;
Small Message(Event Player, Custom String("Time is slowed and you do crazy knockback - perfect for slams!"));
Small Message(All Players(All Teams), String("{0} {1} {2}", Ability Icon String(Hero(Lúcio), Button(Ultimate)), Event Player,
Custom String("Activated Ultimate!")));
Set Slow Motion(Global.UltimateSlowdownScale);
Play Effect(All Players(All Teams), Bad Explosion, Lime Green, Event Player, 3);
Play Effect(All Players(All Teams), Ring Explosion Sound, Lime Green, Event Player, 300);
Play Effect(All Players(All Teams), Bad Explosion, Color(Lime Green), Event Player, 3);
Play Effect(All Players(All Teams), Ring Explosion Sound, Color(Lime Green), Event Player, 300);
Wait(1, Ignore Condition);
Event Player.IsUsingUltimate = False;
Set Slow Motion(100);
}
}
rule("Player Hits Ball (Ultimate)")
{
event
{
Player Dealt Damage;
All;
Lúcio;
}
conditions
{
Event Player.IsUsingUltimate == True;
}
actions
{
Apply Impulse(Victim, Facing Direction Of(Attacker), 10000, To World, Cancel Contrary Motion);
Apply Impulse(Attacker, Facing Direction Of(Attacker) * -1, 10000, To World, Cancel Contrary Motion);
Play Effect(All Players(All Teams), Bad Explosion, Lime Green, Victim, 10);
Play Effect(All Players(All Teams), Buff Impact Sound, Lime Green, Victim, 300);
Play Effect(All Players(All Teams), Bad Explosion, Color(Lime Green), Victim, 10);
Play Effect(All Players(All Teams), Buff Impact Sound, Color(Lime Green), Victim, 300);
}
}
rule("Team Wins (Red)")
{
event
{
Ongoing - Global;
}
conditions
{
Global.RedScores + Global.BlueFouls >= Global.ScoreToWin;
}
actions
{
Wait(0.016, Ignore Condition);
Big Message(All Players(All Teams), Custom String("Red Team"));
Wait(2.500, Ignore Condition);
Play Effect(All Players(All Teams), Ring Explosion, Red, Vector(0, 0, 0), Global.OutOfBounds * 2);
Play Effect(All Players(All Teams), Ring Explosion Sound, Red, Vector(0, 0, 0), Global.OutOfBounds * 20);
Play Effect(All Players(All Teams), Ring Explosion, Color(Red), Vector(0, 0, 0), Global.OutOfBounds * 2);
Play Effect(All Players(All Teams), Ring Explosion Sound, Color(Red), Vector(0, 0, 0), Global.OutOfBounds * 20);
Declare Player Victory(Null);
}
}
rule("Team Wins (Blue)")
{
event
{
Ongoing - Global;
}
conditions
{
Global.BlueScores + Global.RedFouls >= Global.ScoreToWin;
}
actions
{
Wait(0.016, Ignore Condition);
Big Message(All Players(All Teams), Custom String("Blue Team"));
Wait(2.500, Ignore Condition);
Play Effect(All Players(All Teams), Ring Explosion, Blue, Vector(0, 0, 0), Global.OutOfBounds * 2);
Play Effect(All Players(All Teams), Ring Explosion Sound, Blue, Vector(0, 0, 0), Global.OutOfBounds * 20);
Play Effect(All Players(All Teams), Ring Explosion, Color(Blue), Vector(0, 0, 0), Global.OutOfBounds * 2);
Play Effect(All Players(All Teams), Ring Explosion Sound, Color(Blue), Vector(0, 0, 0), Global.OutOfBounds * 20);
Declare Player Victory(Null);
}
}
disabled rule("Debug Messages")
{
event
{
Ongoing - Each Player;
All;
All;
}
actions
{
Create HUD Text(Event Player, Position Of(Event Player), Null, Null, Left, 1000, White, White, White, Visible To and String,
Default Visibility);
Create HUD Text(Event Player, Null, Custom String("Last Attacker"), Global.LastAttacker, Left, 1000, White, White, White,
Create HUD Text(Event Player, Position Of(Event Player), Null, Null, Left, 1000, Color(White), Color(White), Color(White),
Visible To and String, Default Visibility);
Create HUD Text(Event Player, Null, Custom String("Last Attacker"), Global.LastAttacker, Left, 1000, Color(White), Color(White),
Color(White), Visible To and String, Default Visibility);
}
}