Create
Return to post

Comparing difference between and

View raw
  • 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;
  • }
  • }
Join the Workshop.codes Discord