Return to post
settings
{
main
{
Description: "lucio tennis 022 by @nakamoooooo *ボールが高くなるほど円柱の半径が小さくなるよう変更 *エフェクトの色を色々と変更 *ボールのバウンド時やネット時にエフェクトを発生させるよう変更 *各種メッセージを大きくした *2バウンドの時のメッセージを追加 *Now the higher the ball is, the smaller radius of its pillar effect is. *Color fixes *New effects are played on bound and on net. *Out and net messages are now big. *2 bound msg"
Description: "(5ARMM)lucio tennis 023 by @nakamoooooo *左クリックで三人称カメラに切り替えができるようになった *ボールの大きさを0.1倍に変更 *ボールが跳ねない不具合の修正を試みた(まだ不具合はあるかも)*操作方法がスコアボードより下に表示されるようになった"
}
lobby
{
Allow Players Who Are In Queue: Yes
Match Voice Chat: Enabled
Max FFA Players: 11
Max Spectators: 12
}
modes
{
Deathmatch
{
enabled maps
{
Workshop Expanse
}
}
General
{
Limit Roles: 2 Of Each Role Per Team
Respawn As Random Hero: On
}
}
heroes
{
General
{
Doomfist
{
Primary Fire: Off
Quick Melee: Off
Rocket Punch Cooldown Time: 15%
Rocket Punch Knockback Scalar: 50%
Ultimate Ability Meteor Strike: Off
}
Lúcio
{
Damage Dealt: 10%
Damage Received: 10%
Healing Dealt: 500%
Jump Vertical Speed: 200%
Primary Fire: Off
Quick Melee: Off
Soundwave Cooldown Time: 30%
Soundwave Knockback Scalar: 0%
Ultimate Ability Sound Barrier: Off
}
Wrecking Ball
{
Roll Always Active: On
}
enabled heroes
{
Lúcio
}
}
}
}
variables
{
global:
0: theBall
1: net_height
2: ham_ball_radius
3: team1_court_length
4: team2_court_length
5: court_length_with_one_player
6: current_game_state
7: teaming_team_to_set
8: distance_net_stop_player
9: position_ball_reset
10: team_loser
player:
0: doom_is_charging_punch
1: doom_punch_charge_percent
2: doom_punch_move_self_Ycom_vector
3: lucio_can_fire_secondary
4: lucio_secondary_charge_percent
5: lucio_secondary_is_charging
6: ball_vertical_speed
6: ball_vertical_speed_under_zero
7: ball_team_of_last_attacker
8: ball_bound_count
9: lucio_team
10: ball_isJustAfterBooped
11: is_lucio_using_camera
12: ball_vertical_speed_raw
}
subroutines
{
0: stoptheball
}
rule("player hud")
{
event
{
Ongoing - Each Player;
All;
All;
}
actions
{
Create HUD Text(Event Player, String("{0} - {1}", Custom String("lucio charge percent", Null, Null, Null), String("{0}%",
Player Variable(Event Player, lucio_secondary_charge_percent), Null, Null), Null), Null, Null, Left, 0, White, White, White,
Visible To and String, Default Visibility);
Create In-World Text(Filtered Array(Event Player, And(Player Variable(Event Player, lucio_secondary_is_charging), And(Compare(
Player Variable(Event Player, lucio_secondary_charge_percent), >=, 0), Compare(Player Variable(Event Player,
lucio_secondary_charge_percent), <, 33)))), Custom String("□□□", Null, Null, Null), Add(Eye Position(Event Player), Multiply(
50, Facing Direction Of(Event Player))), 3, Do Not Clip, Visible To Position and String, Green, Default Visibility);
Create In-World Text(Filtered Array(Event Player, And(Player Variable(Event Player, lucio_secondary_is_charging), And(Compare(
Player Variable(Event Player, lucio_secondary_charge_percent), >=, 33), Compare(Player Variable(Event Player,
lucio_secondary_charge_percent), <, 67)))), Custom String("■□□", Null, Null, Null), Add(Eye Position(Event Player), Multiply(
50, Facing Direction Of(Event Player))), 3, Do Not Clip, Visible To Position and String, Green, Default Visibility);
Create In-World Text(Filtered Array(Event Player, And(Player Variable(Event Player, lucio_secondary_is_charging), And(Compare(
Player Variable(Event Player, lucio_secondary_charge_percent), >=, 67), Compare(Player Variable(Event Player,
lucio_secondary_charge_percent), <, 100)))), Custom String("■■□", Null, Null, Null), Add(Eye Position(Event Player), Multiply(
50, Facing Direction Of(Event Player))), 3, Do Not Clip, Visible To Position and String, Green, Default Visibility);
Create In-World Text(Filtered Array(Event Player, And(Player Variable(Event Player, lucio_secondary_is_charging), Compare(
Player Variable(Event Player, lucio_secondary_charge_percent), ==, 100))), Custom String("■■■", Null, Null, Null), Add(
Eye Position(Event Player), Multiply(50, Facing Direction Of(Event Player))), 3, Do Not Clip, Visible To Position and String,
Green, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", Custom String("lucio charge percent"), String("{0}%",
Event Player.lucio_secondary_charge_percent)), Null, Null, Left, 0, White, White, White, Visible To and String,
Default Visibility);
Create In-World Text(Filtered Array(Event Player,
Event Player.lucio_secondary_is_charging && Event Player.lucio_secondary_charge_percent >= 0 && Event Player.lucio_secondary_charge_percent < 33),
Custom String("□□□"), Eye Position(Event Player) + 50 * Facing Direction Of(Event Player), 3, Do Not Clip,
Visible To Position and String, Green, Default Visibility);
Create In-World Text(Filtered Array(Event Player,
Event Player.lucio_secondary_is_charging && Event Player.lucio_secondary_charge_percent >= 33 && Event Player.lucio_secondary_charge_percent < 67),
Custom String("■□□"), Eye Position(Event Player) + 50 * Facing Direction Of(Event Player), 3, Do Not Clip,
Visible To Position and String, Green, Default Visibility);
Create In-World Text(Filtered Array(Event Player,
Event Player.lucio_secondary_is_charging && Event Player.lucio_secondary_charge_percent >= 67 && Event Player.lucio_secondary_charge_percent < 100),
Custom String("■■□"), Eye Position(Event Player) + 50 * Facing Direction Of(Event Player), 3, Do Not Clip,
Visible To Position and String, Green, Default Visibility);
Create In-World Text(Filtered Array(Event Player,
Event Player.lucio_secondary_is_charging && Event Player.lucio_secondary_charge_percent == 100), Custom String("■■■"),
Eye Position(Event Player) + 50 * Facing Direction Of(Event Player), 3, Do Not Clip, Visible To Position and String, Green,
Default Visibility);
}
}
rule("doom button settings")
{
event
{
Ongoing - Each Player;
All;
Doomfist;
}
}
rule("doom charge punch")
{
event
{
Ongoing - Each Player;
All;
Doomfist;
}
conditions
{
Is Firing Secondary(Event Player) == True;
}
actions
{
Set Player Variable(Event Player, doom_is_charging_punch, True);
Set Player Variable(Event Player, doom_punch_charge_percent, 0);
Event Player.doom_is_charging_punch = True;
Event Player.doom_punch_charge_percent = 0;
Stop Chasing Player Variable(Event Player, doom_punch_charge_percent);
Chase Player Variable Over Time(Event Player, doom_punch_charge_percent, 100, 1.400, None);
}
}
rule("doom_not_charging_punch")
{
event
{
Ongoing - Each Player;
All;
Doomfist;
}
conditions
{
Is Firing Secondary(Event Player) == False;
Player Variable(Event Player, doom_is_charging_punch) == True;
Event Player.doom_is_charging_punch == True;
}
actions
{
Stop Chasing Player Variable(Event Player, doom_punch_charge_percent);
Set Player Variable(Event Player, doom_is_charging_punch, False);
If(Compare(Is Button Held(Event Player, Primary Fire), ==, False));
Set Player Variable(Event Player, doom_punch_move_self_Ycom_vector, Multiply(Multiply(0.180, 100), Y Component Of(
Facing Direction Of(Event Player))));
Event Player.doom_is_charging_punch = False;
If(Is Button Held(Event Player, Primary Fire) == False);
Event Player.doom_punch_move_self_Ycom_vector = 0.180 * 100 * Y Component Of(Facing Direction Of(Event Player));
End;
}
}
rule("ball settings")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Set Status(Event Player, Null, Unkillable, 9999);
Set Player Variable(Event Player, ball_bound_count, 0);
disabled Create In-World Text(All Players(All Teams), String("{0} - {1}", Custom String("bound count", Null, Null, Null), Player Variable(
Event Player, ball_bound_count), Null), Event Player, 3, Do Not Clip, Visible To Position and String, White,
Default Visibility);
Event Player.ball_bound_count = 0;
disabled Create In-World Text(All Players(All Teams), String("{0} - {1}", Custom String("bound count"), Event Player.ball_bound_count),
Event Player, 3, Do Not Clip, Visible To Position and String, White, Default Visibility);
Create Effect(All Players(All Teams), Light Shaft, Orange, Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(
Position Of(Event Player))), Divide(0.800, Raise To Power(1.500, Multiply(0.250, Altitude Of(Event Player)))),
Visible To Position and Radius);
Position Of(Event Player))), 0.700 / 1.500 ^ (0.250 * Altitude Of(Event Player)), Visible To Position and Radius);
Create Icon(All Players(All Teams), Event Player, Heart, Visible To and Position, Red, True);
Set Player Variable(Event Player, ball_isJustAfterBooped, False);
Event Player.ball_isJustAfterBooped = False;
Create Effect(All Players(All Teams), Sphere, Blue, Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(
Position Of(Event Player))), 0.250, Visible To Position and Radius);
Position Of(Event Player))), 0.100, Visible To Position and Radius);
Start Scaling Player(Event Player, 0.100, False);
Disable Nameplates(Event Player, All Players(All Teams));
}
}
rule("doom punch the ball")
{
event
{
Player Dealt Damage;
All;
Doomfist;
}
conditions
{
Victim == Global Variable(theBall);
Victim == Global.theBall;
}
actions
{
Wait(0.020, Ignore Condition);
Apply Impulse(Global Variable(theBall), Vector(0, Player Variable(Event Player, doom_punch_move_self_Ycom_vector), 0),
Absolute Value(Player Variable(Event Player, doom_punch_move_self_Ycom_vector)), To World, Cancel Contrary Motion);
Apply Impulse(Global.theBall, Vector(0, Event Player.doom_punch_move_self_Ycom_vector, 0), Absolute Value(
Event Player.doom_punch_move_self_Ycom_vector), To World, Cancel Contrary Motion);
}
}
rule("lucio settings")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
actions
{
Set Secondary Fire Enabled(Event Player, False);
Set Player Variable(Event Player, lucio_can_fire_secondary, True);
Set Player Variable(Event Player, lucio_secondary_charge_percent, 0);
Event Player.lucio_can_fire_secondary = True;
Event Player.lucio_secondary_charge_percent = 0;
Set Status(Event Player, Null, Phased Out, 9999);
disabled Create In-World Text(All Players(All Teams), String("{0} - {1}", Custom String("team", Null, Null, Null), Player Variable(
Event Player, lucio_team), Null), Add(Eye Position(Event Player), Facing Direction Of(Event Player)), 2, Clip Against Surfaces,
Visible To Position and String, White, Default Visibility);
disabled Create In-World Text(All Players(All Teams), String("{0} - {1}", Custom String("team"), Event Player.lucio_team), Eye Position(
Event Player) + Facing Direction Of(Event Player), 2, Clip Against Surfaces, Visible To Position and String, White,
Default Visibility);
Disable Built-In Game Mode Respawning(Event Player);
Enable Death Spectate All Players(Event Player);
Set Move Speed(Event Player, 150);
Event Player.is_lucio_using_camera = False;
}
}
rule("lucio secondary release")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Is Button Held(Event Player, Secondary Fire) == False;
}
actions
{
Clear Status(Event Player, Burning);
Set Move Speed(Event Player, 150);
Stop Chasing Player Variable(Event Player, lucio_secondary_charge_percent);
Set Player Variable(Event Player, lucio_can_fire_secondary, False);
Event Player.lucio_can_fire_secondary = False;
Set Secondary Fire Enabled(Event Player, True);
disabled Wait(0.020, Ignore Condition);
Press Button(Event Player, Secondary Fire);
Wait(0.020, Ignore Condition);
Set Secondary Fire Enabled(Event Player, False);
Set Player Variable(Event Player, lucio_secondary_is_charging, False);
Event Player.lucio_secondary_is_charging = False;
Wait(1.180, Ignore Condition);
Set Player Variable(Event Player, lucio_can_fire_secondary, True);
Event Player.lucio_can_fire_secondary = True;
}
}
rule("lucio secondary push")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Is Button Held(Event Player, Secondary Fire) == True;
Player Variable(Event Player, lucio_can_fire_secondary) == True;
Event Player.lucio_can_fire_secondary == True;
}
actions
{
Set Status(Event Player, Null, Burning, 9999);
Set Player Variable(Event Player, lucio_secondary_charge_percent, 0);
Event Player.lucio_secondary_charge_percent = 0;
Chase Player Variable Over Time(Event Player, lucio_secondary_charge_percent, 100, 1, None);
Set Player Variable(Event Player, lucio_secondary_is_charging, True);
Event Player.lucio_secondary_is_charging = True;
Set Move Speed(Event Player, 40);
Play Effect(Event Player, Explosion Sound, White, Event Player, 30);
Wait(0.330, Abort When False);
Play Effect(Event Player, Explosion Sound, White, Event Player, 40);
Wait(0.330, Abort When False);
Play Effect(Event Player, Explosion Sound, White, Event Player, 60);
Wait(0.330, Abort When False);
Play Effect(Event Player, Buff Impact Sound, White, Event Player, 70);
}
}
rule("lucio boop")
{
event
{
Player Dealt Damage;
All;
Lúcio;
}
conditions
{
Is Firing Secondary(Event Player) == True;
Hero Of(Victim) == Hero(Wrecking Ball);
Global Variable(current_game_state) == 2;
Global.current_game_state == 2;
}
actions
{
If(Compare(Player Variable(Victim, ball_team_of_last_attacker), ==, Player Variable(Event Player, lucio_team)));
If(Victim.ball_team_of_last_attacker == Event Player.lucio_team);
Else;
Set Player Variable(Victim, ball_isJustAfterBooped, True);
Apply Impulse(Victim, Direction From Angles(Horizontal Facing Angle Of(Event Player), Add(-10, Vertical Facing Angle Of(
Event Player))), Add(10, Multiply(0.140, Player Variable(Event Player, lucio_secondary_charge_percent))), To World,
Cancel Contrary Motion);
Set Player Variable(Victim, ball_team_of_last_attacker, Player Variable(Event Player, lucio_team));
Set Player Variable(Victim, ball_bound_count, 0);
Victim.ball_isJustAfterBooped = True;
Apply Impulse(Victim, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 + Vertical Facing Angle Of(
Event Player)), 10 + 0.140 * Event Player.lucio_secondary_charge_percent, To World, Cancel Contrary Motion);
Victim.ball_team_of_last_attacker = Event Player.lucio_team;
Victim.ball_bound_count = 0;
End;
}
}
rule("ball vertical speed update")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Is In Air(Event Player) == True;
Vertical Speed Of(Event Player) < 0;
}
actions
{
Set Player Variable(Event Player, ball_vertical_speed, Vertical Speed Of(Event Player));
Event Player.ball_vertical_speed_raw = Vertical Speed Of(Event Player);
If(Event Player.ball_vertical_speed_raw < 0);
Event Player.ball_vertical_speed_under_zero = Event Player.ball_vertical_speed_raw;
End;
Wait(0.016, Ignore Condition);
Loop If Condition Is True;
}
}
rule("ball bound")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Is On Ground(Event Player) == True;
disabled Player Variable(Event Player, ball_vertical_speed) < -0.900;
Global Variable(current_game_state) == 2;
disabled Event Player.ball_vertical_speed_under_zero < -0.900;
Global.current_game_state == 2;
}
actions
{
If(Compare(Player Variable(Event Player, ball_isJustAfterBooped), ==, False));
If(Event Player.ball_isJustAfterBooped == False);
Play Effect(All Players(All Teams), Bad Explosion, Blue, Vector(X Component Of(Position Of(Event Player)), 0, Z Component Of(
Position Of(Event Player))), 0.400);
Modify Player Variable(Event Player, ball_bound_count, Add, 1);
If(Compare(Player Variable(Event Player, ball_vertical_speed), <, -0.900));
Apply Impulse(Event Player, Up, Multiply(0.750, Absolute Value(Player Variable(Event Player, ball_vertical_speed))), To World,
Event Player.ball_bound_count += 1;
If(Event Player.ball_vertical_speed_under_zero < -0.900);
Apply Impulse(Event Player, Up, 0.750 * Absolute Value(Event Player.ball_vertical_speed_under_zero), To World,
Cancel Contrary Motion);
End;
If(Compare(Player Variable(Event Player, ball_bound_count), ==, 1));
If(Compare(Player Variable(Event Player, ball_team_of_last_attacker), ==, 1));
If(Event Player.ball_bound_count == 1);
If(Event Player.ball_team_of_last_attacker == 1);
"team2 court in"
If(And(Compare(Absolute Value(Subtract(X Component Of(Position Of(Event Player)), Multiply(0.500, Global Variable(
team2_court_length)))), <, Multiply(0.500, Global Variable(team2_court_length))), Compare(Absolute Value(Z Component Of(
Position Of(Event Player))), <, Multiply(0.500, Global Variable(team2_court_length)))));
Small Message(All Players(All Teams), Custom String("in", Null, Null, Null));
If(Absolute Value(X Component Of(Position Of(Event Player)) - 0.500 * Global.team2_court_length)
< 0.500 * Global.team2_court_length && Absolute Value(Z Component Of(Position Of(Event Player)))
< 0.500 * Global.team2_court_length);
Small Message(All Players(All Teams), Custom String("in"));
Else;
Big Message(All Players(All Teams), Custom String("out", Null, Null, Null));
Set Global Variable(team_loser, 1);
Set Global Variable(current_game_state, 3);
Big Message(All Players(All Teams), Custom String("out"));
Global.team_loser = 1;
Global.current_game_state = 3;
End;
End;
If(Compare(Player Variable(Event Player, ball_team_of_last_attacker), ==, 2));
If(Event Player.ball_team_of_last_attacker == 2);
"team1 court in"
If(And(Compare(Absolute Value(Subtract(X Component Of(Position Of(Event Player)), Multiply(-0.500, Global Variable(
team1_court_length)))), <, Multiply(0.500, Global Variable(team1_court_length))), Compare(Absolute Value(Z Component Of(
Position Of(Event Player))), <, Multiply(0.500, Global Variable(team1_court_length)))));
Small Message(All Players(All Teams), Custom String("in", Null, Null, Null));
If(Absolute Value(X Component Of(Position Of(Event Player)) - -0.500 * Global.team1_court_length)
< 0.500 * Global.team1_court_length && Absolute Value(Z Component Of(Position Of(Event Player)))
< 0.500 * Global.team1_court_length);
Small Message(All Players(All Teams), Custom String("in"));
Else;
Big Message(All Players(All Teams), Custom String("out", Null, Null, Null));
Set Global Variable(team_loser, 2);
Set Global Variable(current_game_state, 3);
Big Message(All Players(All Teams), Custom String("out"));
Global.team_loser = 2;
Global.current_game_state = 3;
End;
End;
End;
If(Compare(Player Variable(Event Player, ball_bound_count), ==, 2));
Set Global Variable(team_loser, Add(Multiply(1, Compare(Player Variable(Event Player, ball_team_of_last_attacker), ==, 2)),
Multiply(2, Compare(Player Variable(Event Player, ball_team_of_last_attacker), ==, 1))));
Big Message(All Players(All Teams), Custom String("2 bounds", Null, Null, Null));
Set Global Variable(current_game_state, 3);
If(Event Player.ball_bound_count == 2);
Global.team_loser = 1 * (Event Player.ball_team_of_last_attacker == 2) + 2 * (Event Player.ball_team_of_last_attacker == 1);
Big Message(All Players(All Teams), Custom String("2 bounds"));
Global.current_game_state = 3;
End;
Else;
Wait(0.200, Ignore Condition);
Loop If Condition Is True;
End;
}
}
rule("effects")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
}
actions
{
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, Add(0.100, Global Variable(net_height)), -100), Vector(0, Add(
0.100, Global Variable(net_height)), 100), White, Visible To);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100 + Global.net_height, -100), Vector(0,
0.100 + Global.net_height, 100), White, Visible To);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100, -100), Vector(0, 0.100, 100), White, Visible To);
"team 1 court (x minus)"
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100, Divide(Global Variable(team1_court_length), 2)), Vector(
Multiply(-1, Global Variable(team1_court_length)), 0.100, Divide(Global Variable(team1_court_length), 2)), Purple,
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100, Divide(Global Variable(team1_court_length), -2)), Vector(
Multiply(-1, Global Variable(team1_court_length)), 0.100, Divide(Global Variable(team1_court_length), -2)), Purple,
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100, Global.team1_court_length / 2), Vector(
-1 * Global.team1_court_length, 0.100, Global.team1_court_length / 2), Purple, Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100, Global.team1_court_length / -2), Vector(
-1 * Global.team1_court_length, 0.100, Global.team1_court_length / -2), Purple, Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(-1 * Global.team1_court_length, 0.100,
Global.team1_court_length / 2), Vector(-1 * Global.team1_court_length, 0.100, Global.team1_court_length / -2), Purple,
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(Multiply(-1, Global Variable(team1_court_length)), 0.100, Divide(
Global Variable(team1_court_length), 2)), Vector(Multiply(-1, Global Variable(team1_court_length)), 0.100, Divide(
Global Variable(team1_court_length), -2)), Purple, Visible To Position and Radius);
"team 2 court (x plus)"
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100, Divide(Global Variable(team2_court_length), 2)), Vector(
Multiply(1, Global Variable(team2_court_length)), 0.100, Divide(Global Variable(team2_court_length), 2)), Purple,
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100, Global.team2_court_length / 2), Vector(
1 * Global.team2_court_length, 0.100, Global.team2_court_length / 2), Purple, Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100, Global.team2_court_length / -2), Vector(
1 * Global.team2_court_length, 0.100, Global.team2_court_length / -2), Purple, Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(1 * Global.team2_court_length, 0.100,
Global.team2_court_length / 2), Vector(1 * Global.team2_court_length, 0.100, Global.team2_court_length / -2), Purple,
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.100, Divide(Global Variable(team2_court_length), -2)), Vector(
Multiply(1, Global Variable(team2_court_length)), 0.100, Divide(Global Variable(team2_court_length), -2)), Purple,
Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(Multiply(1, Global Variable(team2_court_length)), 0.100, Divide(
Global Variable(team2_court_length), 2)), Vector(Multiply(1, Global Variable(team2_court_length)), 0.100, Divide(
Global Variable(team2_court_length), -2)), Purple, Visible To Position and Radius);
}
}
rule("init var")
{
event
{
Ongoing - Global;
}
actions
{
Set Global Variable(net_height, 0.900);
Set Global Variable(ham_ball_radius, 0.800);
Set Global Variable(court_length_with_one_player, 14);
Set Global Variable(team1_court_length, Global Variable(court_length_with_one_player));
Set Global Variable(team2_court_length, Global Variable(court_length_with_one_player));
Set Global Variable(distance_net_stop_player, 5);
Set Global Variable(position_ball_reset, Vector(0, 12, 0));
Global.net_height = 0.900;
Global.ham_ball_radius = 0.800;
Global.court_length_with_one_player = 14;
Global.team1_court_length = Global.court_length_with_one_player;
Global.team2_court_length = Global.court_length_with_one_player;
Global.distance_net_stop_player = 5;
Global.position_ball_reset = Vector(0, 12, 0);
Disable Built-In Game Mode Scoring;
Create HUD Text(All Players(All Teams), Custom String("右クリックは押して溜め、離して撃つ", Null, Null, Null), Null, Null, Top, 0, White, White,
Create HUD Text(All Players(All Teams), Custom String("右クリックは押して溜め、離して撃つ"), Null, Null, Top, 1, White, White, White,
Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Custom String("To fire Secondary, hold and release"), Null, Null, Top, 2, White, White,
White, Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), Custom String("To fire Secondary, hold and release", Null, Null, Null), Null, Null, Top, 0,
White, White, White, Visible To and String, Default Visibility);
}
}
rule("set up time shorten")
{
event
{
Ongoing - Global;
}
conditions
{
Is Assembling Heroes == True;
}
actions
{
Set Match Time(7);
}
}
rule("net power")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Distance Between(Add(Vector(0, Global Variable(ham_ball_radius), 0), Position Of(Event Player)), Vector(0, Global Variable(
net_height), Z Component Of(Position Of(Event Player)))) < Global Variable(ham_ball_radius);
Global Variable(current_game_state) == 2;
Distance Between(Vector(0, Global.ham_ball_radius, 0) + Position Of(Event Player), Vector(0, Global.net_height, Z Component Of(
Position Of(Event Player)))) < Global.ham_ball_radius;
Global.current_game_state == 2;
}
actions
{
Apply Impulse(Event Player, Direction Towards(Vector(0, Global Variable(net_height), Z Component Of(Position Of(Event Player))),
Add(Vector(0, Global Variable(ham_ball_radius), 0), Position Of(Event Player))), Multiply(5, Subtract(Global Variable(
ham_ball_radius), Distance Between(Vector(0, Global Variable(net_height), Z Component Of(Position Of(Event Player))), Add(
Vector(0, Global Variable(ham_ball_radius), 0), Position Of(Event Player))))), To World, Cancel Contrary Motion);
disabled Kill(Filtered Array(All Players(All Teams), Compare(Player Variable(Current Array Element, lucio_team), ==, Player Variable(
Event Player, ball_team_of_last_attacker))), Null);
If(Compare(Player Variable(Event Player, ball_bound_count), ==, 0));
Big Message(All Players(All Teams), Custom String("net", Null, Null, Null));
Set Global Variable(team_loser, Player Variable(Event Player, ball_team_of_last_attacker));
Apply Impulse(Event Player, Direction Towards(Vector(0, Global.net_height, Z Component Of(Position Of(Event Player))), Vector(0,
Global.ham_ball_radius, 0) + Position Of(Event Player)), 5 * (Global.ham_ball_radius - Distance Between(Vector(0,
Global.net_height, Z Component Of(Position Of(Event Player))), Vector(0, Global.ham_ball_radius, 0) + Position Of(
Event Player))), To World, Cancel Contrary Motion);
disabled Kill(Filtered Array(All Players(All Teams), Current Array Element.lucio_team == Event Player.ball_team_of_last_attacker), Null);
If(Event Player.ball_bound_count == 0);
Big Message(All Players(All Teams), Custom String("net"));
Global.team_loser = Event Player.ball_team_of_last_attacker;
Play Effect(All Players(All Teams), Ring Explosion, Red, Event Player, 14);
Play Effect(All Players(All Teams), Explosion Sound, White, Event Player, 70);
Set Global Variable(current_game_state, 3);
Global.current_game_state = 3;
End;
}
}
rule("game start state null")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Global Variable(current_game_state) == Null;
Global.current_game_state == Null;
}
actions
{
Create Dummy Bot(Hero(Wrecking Ball), All Teams, 11, Global Variable(position_ball_reset), Vector(0, 0, 0));
Set Global Variable(theBall, Last Created Entity);
Set Gravity(Global Variable(theBall), 0);
Create Dummy Bot(Hero(Wrecking Ball), All Teams, 11, Global.position_ball_reset, Vector(0, 0, 0));
Global.theBall = Last Created Entity;
Set Gravity(Global.theBall, 0);
disabled Create Dummy Bot(Hero(Lúcio), All Teams, 10, Vector(0, 13, 0), Vector(0, 0, 0));
disabled Create Dummy Bot(Hero(Lúcio), All Teams, 9, Vector(0, 13, 0), Vector(0, 0, 0));
disabled Create Dummy Bot(Hero(Lúcio), All Teams, 8, Vector(0, 13, 0), Vector(0, 0, 0));
Wait(0.500, Ignore Condition);
Set Global Variable(current_game_state, 1);
Global.current_game_state = 1;
}
}
rule("game start state 1")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Global Variable(current_game_state) == 1;
Global.current_game_state == 1;
}
actions
{
Teleport(Global Variable(theBall), Global Variable(position_ball_reset));
Set Gravity(Global Variable(theBall), 0);
Teleport(Global.theBall, Global.position_ball_reset);
Set Gravity(Global.theBall, 0);
Start Rule(stoptheball, Restart Rule);
Resurrect(All Dead Players(All Teams));
Set Player Variable(Players On Hero(Hero(Lúcio), All Teams), lucio_team, Null);
Players On Hero(Hero(Lúcio), All Teams).lucio_team = Null;
Wait(0.100, Ignore Condition);
Set Global Variable(teaming_team_to_set, 1);
While(Compare(Count Of(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(Current Array Element,
lucio_team), ==, Null))), >=, 1));
Set Player Variable(First Of(Randomized Array(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(
Current Array Element, lucio_team), ==, Null)))), lucio_team, Global Variable(teaming_team_to_set));
disabled Set Player Variable(First Of(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(Current Array Element,
lucio_team), ==, Null))), lucio_team, Global Variable(teaming_team_to_set));
Set Global Variable(teaming_team_to_set, Add(Multiply(1, Compare(Global Variable(teaming_team_to_set), ==, 2)), Multiply(2,
Compare(Global Variable(teaming_team_to_set), ==, 1))));
Global.teaming_team_to_set = 1;
While(Count Of(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Current Array Element.lucio_team == Null)) >= 1);
First Of(Randomized Array(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Current Array Element.lucio_team == Null)))
.lucio_team = Global.teaming_team_to_set;
disabled First Of(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Current Array Element.lucio_team == Null))
.lucio_team = Global.teaming_team_to_set;
Global.teaming_team_to_set = 1 * (Global.teaming_team_to_set == 2) + 2 * (Global.teaming_team_to_set == 1);
End;
disabled Set Global Variable(team1_court_length, Multiply(Global Variable(court_length_with_one_player), Square Root(Count Of(
Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(Current Array Element, lucio_team), ==,
1))))));
disabled Set Global Variable(team2_court_length, Multiply(Global Variable(court_length_with_one_player), Square Root(Count Of(
Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(Current Array Element, lucio_team), ==,
2))))));
Set Global Variable(team1_court_length, Multiply(Global Variable(court_length_with_one_player), Square Root(Square Root(Count Of(
Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(Current Array Element, lucio_team), ==,
1)))))));
Set Global Variable(team2_court_length, Multiply(Global Variable(court_length_with_one_player), Square Root(Square Root(Count Of(
Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(Current Array Element, lucio_team), ==,
2)))))));
Teleport(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(Current Array Element, lucio_team), ==,
1)), Vector(Multiply(-1, Global Variable(team1_court_length)), 0, 0));
Teleport(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(Current Array Element, lucio_team), ==,
2)), Vector(Multiply(1, Global Variable(team2_court_length)), 0, 0));
disabled Global.team1_court_length = Global.court_length_with_one_player * Square Root(Count Of(Filtered Array(Players On Hero(Hero(Lúcio),
All Teams), Current Array Element.lucio_team == 1)));
disabled Global.team2_court_length = Global.court_length_with_one_player * Square Root(Count Of(Filtered Array(Players On Hero(Hero(Lúcio),
All Teams), Current Array Element.lucio_team == 2)));
Global.team1_court_length = Global.court_length_with_one_player * Square Root(Square Root(Count Of(Filtered Array(Players On Hero(
Hero(Lúcio), All Teams), Current Array Element.lucio_team == 1))));
Global.team2_court_length = Global.court_length_with_one_player * Square Root(Square Root(Count Of(Filtered Array(Players On Hero(
Hero(Lúcio), All Teams), Current Array Element.lucio_team == 2))));
Teleport(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Current Array Element.lucio_team == 1), Vector(
-1 * Global.team1_court_length, 0, 0));
Teleport(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Current Array Element.lucio_team == 2), Vector(
1 * Global.team2_court_length, 0, 0));
Wait(1.500, Ignore Condition);
Teleport(Global Variable(theBall), Vector(Add(5, Multiply(-1, Global Variable(team1_court_length))), 9, 0));
Set Global Variable(current_game_state, 2);
Teleport(Global.theBall, Vector(5 + -1 * Global.team1_court_length, 9, 0));
Global.current_game_state = 2;
}
}
rule("lucio (when team set) net stop power etc")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Is Game In Progress == True;
Player Variable(Event Player, lucio_team) != Null;
Event Player.lucio_team != Null;
}
actions
{
Stop Accelerating(Event Player);
If(Compare(Player Variable(Event Player, lucio_team), ==, 1));
Start Accelerating(Event Player, Vector(-1, 0.100, 0), Multiply(100, Compare(X Component Of(Position Of(Event Player)), >,
Multiply(-1, Global Variable(distance_net_stop_player)))), 20, To World, Direction Rate and Max Speed);
If(Event Player.lucio_team == 1);
Start Accelerating(Event Player, Vector(-1, 0.100, 0), 100 * (X Component Of(Position Of(Event Player))
> -1 * Global.distance_net_stop_player), 20, To World, Direction Rate and Max Speed);
Set Facing(Event Player, Vector(1, 0, 0), To World);
Else;
Start Accelerating(Event Player, Vector(1, 0.100, 0), Multiply(100, Compare(X Component Of(Position Of(Event Player)), <, Multiply(
1, Global Variable(distance_net_stop_player)))), 20, To World, Direction Rate and Max Speed);
Start Accelerating(Event Player, Vector(1, 0.100, 0), 100 * (X Component Of(Position Of(Event Player))
< 1 * Global.distance_net_stop_player), 20, To World, Direction Rate and Max Speed);
Set Facing(Event Player, Vector(-1, 0, 0), To World);
End;
}
}
rule("sub_stoptheball")
{
event
{
Subroutine;
stoptheball;
}
actions
{
Apply Impulse(Global Variable(theBall), Down, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global Variable(theBall), Up, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global Variable(theBall), Right, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global Variable(theBall), Left, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global Variable(theBall), Forward, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global Variable(theBall), Backward, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global.theBall, Down, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global.theBall, Up, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global.theBall, Right, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global.theBall, Left, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global.theBall, Forward, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global.theBall, Backward, 0.001, To World, Cancel Contrary Motion);
}
}
rule("game start state 2")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Global Variable(current_game_state) == 2;
Global.current_game_state == 2;
}
actions
{
Set Player Variable(Global Variable(theBall), ball_bound_count, 0);
Set Gravity(Global Variable(theBall), 100);
disabled Apply Impulse(Global Variable(theBall), Direction From Angles(Horizontal Angle From Direction(Direction Towards(Vector(0, 0, 0),
Vector(Multiply(-1, Global Variable(team1_court_length)), 0, Random Real(Divide(Global Variable(team1_court_length), -2),
Divide(Global Variable(team1_court_length), 2))))), 0), 7, To World, Cancel Contrary Motion);
Set Player Variable(Global Variable(theBall), ball_team_of_last_attacker, 2);
Global.theBall.ball_bound_count = 0;
Set Gravity(Global.theBall, 100);
disabled Apply Impulse(Global.theBall, Direction From Angles(Horizontal Angle From Direction(Direction Towards(Vector(0, 0, 0), Vector(
-1 * Global.team1_court_length, 0, Random Real(Global.team1_court_length / -2, Global.team1_court_length / 2)))), 0), 7,
To World, Cancel Contrary Motion);
Global.theBall.ball_team_of_last_attacker = 2;
}
}
rule("lucio ai motion and facing")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Add(Position Of(Global Variable(theBall)),
Multiply(3, Direction From Angles(Horizontal Angle From Direction(Direction Towards(Vector(0, 0, 0), Position Of(
Global Variable(theBall)))), 0)))), 1, To World, Replace existing throttle, Direction and Magnitude);
Start Throttle In Direction(Event Player, Direction Towards(Position Of(Event Player), Position Of(Global.theBall)
+ 3 * Direction From Angles(Horizontal Angle From Direction(Direction Towards(Vector(0, 0, 0), Position Of(Global.theBall))),
0)), 1, To World, Replace existing throttle, Direction and Magnitude);
Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Vector(0, 4, 0)), 500, To World, Direction and Turn Rate);
}
}
rule("lucio ai boop")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Distance Between(Position Of(Event Player), Position Of(Global Variable(theBall))) < 10;
Distance Between(Position Of(Event Player), Position Of(Global.theBall)) < 10;
}
actions
{
Start Holding Button(Event Player, Secondary Fire);
Wait(Random Real(0.100, 0.800), Ignore Condition);
Stop Holding Button(Event Player, Secondary Fire);
Wait(0.250, Ignore Condition);
Loop If Condition Is True;
}
}
rule("state 3")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
Global Variable(current_game_state) == 3;
Global.current_game_state == 3;
}
actions
{
Modify Player Score(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Compare(Player Variable(Current Array Element,
lucio_team), !=, Global Variable(team_loser))), 1);
Kill(Filtered Array(All Players(All Teams), Compare(Player Variable(Current Array Element, lucio_team), ==, Global Variable(
team_loser))), Global Variable(theBall));
Modify Player Score(Filtered Array(Players On Hero(Hero(Lúcio), All Teams), Current Array Element.lucio_team != Global.team_loser),
1);
Kill(Filtered Array(All Players(All Teams), Current Array Element.lucio_team == Global.team_loser), Global.theBall);
Wait(2, Ignore Condition);
Set Global Variable(current_game_state, 1);
Global.current_game_state = 1;
}
}
rule("ball just after booped reset")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Is Game In Progress == True;
Player Variable(Event Player, ball_isJustAfterBooped) == True;
Event Player.ball_isJustAfterBooped == True;
}
actions
{
Wait(0.020, Ignore Condition);
Set Player Variable(Event Player, ball_isJustAfterBooped, False);
Event Player.ball_isJustAfterBooped = False;
}
}
rule("lucio primary cam toggle")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Primary Fire) == True;
}
actions
{
If(Event Player.is_lucio_using_camera == False);
Start Camera(Event Player, Ray Cast Hit Position(Eye Position(Event Player) + Vector(0, 1.500, 0), Eye Position(Event Player)
+ Vector(0, 1.500, 0) + -4 * Facing Direction Of(Event Player), Empty Array, Null, False), Eye Position(Event Player) + Vector(
0, 1.500, 0) + 100 * Facing Direction Of(Event Player), 40);
disabled Start Camera(Event Player, Eye Position(Event Player) + Vector(0, 1, 0) + -2.500 * Facing Direction Of(Event Player), Eye Position(
Event Player) + Vector(0, 1, 0) + 100 * Facing Direction Of(Event Player), 50);
Event Player.is_lucio_using_camera = True;
Else;
Stop Camera(Event Player);
Event Player.is_lucio_using_camera = False;
End;
}
}