Return to post
settings
{
main
{
Description: "lucioball neo 0.8.6 by @nakamoooooo *マップを夜モードに変更 *ジャンプパッドに関するスクリプトを削減 *ボールを飛ばすエフェクトの色味を調整 *ボールを飛ばした時にダメージ音追加 *The map is now night mode. *Scripts are redused, that work for jumppads. *Color of effect fix *Now damage sound is played on hitting the ball."
Description: "(AYKSC)lucioball neo 0.8.7 by @nakamoooooo *ゲンジの手裏剣の拡散を12度から9度に変更 *モイラのオーブのクールタイムを70%(7秒)に変更、効果が残る時間も同様 *マーシーのshiftにクールタイムが表示されるよう変更*ラインハルトが盾を構えて後ろに進む速度を0.125に変更"
}
lobby
{
Allow Players Who Are In Queue: Yes
Max Spectators: 12
Max Team 1 Players: 5
Max Team 2 Players: 5
}
modes
{
Team Deathmatch
{
enabled maps
{
Workshop Expanse Night
}
}
General
{
Game Length In Minutes: 5
Game Mode Start: Manual
Hero Limit: Off
Respawn Time Scalar: 80%
Score To Win: 7
Self Initiated Respawn: Off
}
}
heroes
{
General
{
Brigitte
{
Barrier Shield Cooldown Time: 0%
Barrier Shield Recharge Rate: 500%
Repair Pack: Off
Shield Bash Knockback Scalar: 25%
Whip Shot Knockback Scalar: 25%
}
Genji
{
Primary Fire: Off
Projectile Speed: 500%
Quick Melee: Off
Ultimate Ability Dragonblade: Off
}
Hanzo
{
Quick Melee: Off
Sonic Arrow Cooldown Time: 55%
Storm Arrows: Off
Ultimate Ability Dragonstrike: Off
}
Lúcio
{
Crossfade: Off
Primary Fire: Off
Quick Melee: Off
Soundwave Cooldown Time: 75%
Soundwave Knockback Scalar: 0%
}
Mei
{
Cryo-Freeze Cooldown Time: 0%
Ice Wall Cooldown Time: 54%
No Ammunition Requirement: On
Quick Melee: Off
Weapon Freeze Duration Scalar: 20%
Weapon Freeze Rate Scalar: 0%
}
Mercy
{
Guardian Angel: Off
Primary Fire: Off
Quick Melee: Off
Resurrect: Off
Secondary Fire: Off
Ultimate Ability Valkyrie: Off
Weapons Enabled: Caduceus Staff Only
}
Moira
{
Biotic Energy Maximum: 500%
Biotic Energy Recharge Rate: 500%
Biotic Orb Cooldown Time: 70%
Damage Dealt: 10%
Projectile Speed: 0%
Quick Melee: Off
}
Reinhardt
{
Charge Cooldown Time: 55%
Charge Knockback Scalar: 0%
Rocket Hammer Knockback Scalar: 0%
}
Sigma
{
Accretion: Off
Accretion Knockback Scalar: 0%
Kinetic Grasp Cooldown Time: 60%
Primary Fire: Off
Projectile Gravity: 0%
Quick Melee: Off
Ultimate Ability Gravitic Flux: Off
}
Tracer
{
Ammunition Clip Size Scalar: 105%
Quick Melee: Off
Recall Cooldown Time: 120%
Ultimate Ability Pulse Bomb: Off
}
Widowmaker
{
Damage Dealt: 10%
Grappling Hook Cooldown Time: 35%
No Ammunition Requirement: On
No Automatic Fire: On
Quick Melee: Off
Ultimate Ability Infra-Sight: Off
Venom Mine: Off
}
Wrecking Ball
{
Roll Always Active: On
}
enabled heroes
{
Genji
Hanzo
Lúcio
Mei
Mercy
Moira
Reinhardt
Sigma
Tracer
Widowmaker
}
}
}
}
variables
{
global:
0: theBall
1: area_radius
2: center_goal_distance
3: floor_goal_height
4: I_goalEffectCreation
5: canGoal
6: Moira_orb_range
7: center_sidewall_distance
8: goal_half_length
9: pos_jump_pad
10: radius_jump_pad
11: radius_mei_frost
12: I_goalKillSlot
13: genji_secondary_gap_degrees
14: sigma_primary_explode_radius
15: tracer_max_primary_force
16: Recaller
17: isBallRecalling
18: mercy_beam_natural_length
19: mercy_beam_maximum_length
20: hanzo_min_spd
21: hanzo_max_spd
22: hanzo_bomb_radius
23: Xlength_center_goalJumpPad
player:
0: ball_previous_pos
1: ball_ray_hit_pos
2: ball_ray_hit_normal
3: ball_current_pos
4: moira_canShotOrb
5: moira_orbPos
6: moira_orbBirthTime
7: moira_orbIsHeal
8: moira_orbEffect
9: step_in_jumppad
10: mei_frost_positions
11: mei_frost_limit_times
12: rein_isSwingOdd
13: widow_charge_percent
14: widow_isCharging
15: widow_isSeeingScope
16: widow_charge_percent_shot
17: widow_txt_percent_shot
18: widow_txt_percent_current
19: genjiS_arg_axis_direction
20: genjiS_arg_theta_degree
21: genjiS_ret_direction
22: genji_I_secondary
23: sigma_pos_primary
24: sigma_spd_primary
27: sigma_effect_primary
28: sigma_I_primary
29: sigma_primary_fired_time
30: Tracer_primary_force
31: Tracer_ball_distance
32: mercy_beam_effect
33: mercy_ball_distance
34: Is_mercy_primary_looping
35: mercy_self_move_direction
36: mercy_ball_primary_speed
37: is_hanzo_charging
38: hanzo_spd_primary
39: hanzo_velocity_primary
40: hanzo_pos_arrow
41: effect_hanzo_bomb
42: hanzo_using_ability1
43: hanzo_arrow_has_bomb
44: hanzoS_arrow_travel_is_looping
45: hanzo_bomb_is_bonded_to_ball
46: hanzo_pos_bomb
47: mercy_ability1_target_player
}
subroutines
{
0: stopTheBall
1: BallPowerEffect
2: teleportToFirstPos
3: genjiS_getSideShurikenDirection
4: hanzoS_arrow_trabel
5: hanzoS_arrow_hit
6: hanzoS_bomb
}
rule("Display server performance characteristics")
{
event
{
Ongoing - Global;
}
actions
{
Create HUD Text(All Players(All Teams), String("{0}: {1}", String("Server Load"), String("{0}%", Server Load)), Null, Null, Left,
0, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), String("{0}: {1}", String("Server Load Average"), String("{0}%", Server Load Average)),
Null, Null, Left, 1, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(All Players(All Teams), String("{0}: {1}", String("Server Load Peak"), String("{0}%", Server Load Peak)), Null,
Null, Left, 2, White, White, White, Visible To and String, Default Visibility);
}
}
rule("create ball")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
}
actions
{
Create Dummy Bot(Hero(Wrecking Ball), Team 1, 5, Vector(0, 0, 0), Vector(0, 0, 0));
Global.theBall = Last Created Entity;
Set Status(Global.theBall, Null, Unkillable, 9999);
disabled Set Status(Global.theBall, Null, Phased Out, 9999);
Start Camera(Global.theBall, Vector(0, 10, 5), Position Of(Global.theBall), 15);
Create Icon(All Players(All Teams), Position Of(Global.theBall), Circle, Visible To and Position, Purple, True);
Create Effect(All Players(All Teams), Light Shaft, White, Vector(X Component Of(Position Of(Global.theBall)), 0, Z Component Of(
Position Of(Global.theBall))), 0.200, Visible To Position and Radius);
"sideway ball accel"
Start Accelerating(Global.theBall, Vector(0, 0, 1 - 2 * (Z Component Of(Position Of(Global.theBall)) > 0)), 100 * (Absolute Value(
Z Component Of(Position Of(Global.theBall))) > Global.center_sidewall_distance), 20, To World, Direction Rate and Max Speed);
}
}
rule("Hanzo settings")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
actions
{
Set Primary Fire Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, True);
Set Ability 1 Enabled(Event Player, True);
Set Ability 2 Enabled(Event Player, False);
Set Ultimate Ability Enabled(Event Player, False);
}
}
rule("Mei settings")
{
event
{
Ongoing - Each Player;
All;
Mei;
}
actions
{
Set Primary Fire Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, False);
Set Ability 1 Enabled(Event Player, True);
Set Ability 2 Enabled(Event Player, True);
Set Ultimate Ability Enabled(Event Player, False);
Event Player.mei_frost_positions = Empty Array;
Event Player.mei_frost_limit_times = Empty Array;
}
}
rule("Mercy settings")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
actions
{
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, False);
Set Ability 1 Enabled(Event Player, False);
Set Ability 2 Enabled(Event Player, False);
Set Ultimate Ability Enabled(Event Player, False);
}
}
rule("Lucio settings")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
actions
{
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, True);
Set Ability 1 Enabled(Event Player, False);
Set Ability 2 Enabled(Event Player, True);
Set Ultimate Ability Enabled(Event Player, False);
}
}
rule("Sigma settings")
{
event
{
Ongoing - Each Player;
All;
Sigma;
}
actions
{
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, True);
Set Ability 1 Enabled(Event Player, True);
Set Ability 2 Enabled(Event Player, False);
Set Ultimate Ability Enabled(Event Player, False);
}
}
rule("Moira settings")
{
event
{
Ongoing - Each Player;
All;
Moira;
}
actions
{
Set Primary Fire Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, True);
Set Ability 1 Enabled(Event Player, True);
Set Ability 2 Enabled(Event Player, True);
Set Ultimate Ability Enabled(Event Player, False);
Event Player.moira_canShotOrb = True;
}
}
rule("Rein settings")
{
event
{
Ongoing - Each Player;
All;
Reinhardt;
}
actions
{
Set Primary Fire Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, True);
Set Ability 1 Enabled(Event Player, True);
Set Ability 2 Enabled(Event Player, False);
Set Ultimate Ability Enabled(Event Player, False);
}
}
rule("Widow settings")
{
event
{
Ongoing - Each Player;
All;
Widowmaker;
}
actions
{
Set Primary Fire Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, True);
Set Ability 1 Enabled(Event Player, True);
Set Ability 2 Enabled(Event Player, False);
Set Ultimate Ability Enabled(Event Player, False);
Create In-World Text(Filtered Array(Append To Array(Empty Array, Event Player), Event Player.widow_isCharging), String("{0}%",
Round To Integer(Event Player.widow_charge_percent, To Nearest)), Eye Position(Event Player) Direction From Angles(
Horizontal Facing Angle Of(Event Player), 6.100 Vertical Facing Angle Of(Event Player)), 1.750, Do Not Clip,
Round To Integer(Event Player.widow_charge_percent, To Nearest)), Eye Position(Event Player) + Direction From Angles(
Horizontal Facing Angle Of(Event Player), 6.100 + Vertical Facing Angle Of(Event Player)), 1.750, Do Not Clip,
Visible To Position and String, White, Default Visibility);
Modify Player Variable(Event Player, widow_txt_percent_current, Append To Array, Last Text ID);
}
}
rule("Genji settings")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
actions
{
Set Primary Fire Enabled(Event Player, False);
Set Secondary Fire Enabled(Event Player, True);
Set Ability 1 Enabled(Event Player, True);
Set Ability 2 Enabled(Event Player, True);
Set Ultimate Ability Enabled(Event Player, False);
}
}
rule("tracer settings")
{
event
{
Ongoing - Each Player;
All;
Tracer;
}
actions
{
Set Primary Fire Enabled(Event Player, True);
Set Secondary Fire Enabled(Event Player, True);
Set Ability 1 Enabled(Event Player, True);
Set Ability 2 Enabled(Event Player, True);
Set Ultimate Ability Enabled(Event Player, False);
}
}
rule("set up time shorten")
{
event
{
Ongoing - Global;
}
conditions
{
Is Assembling Heroes == True;
}
actions
{
Set Match Time(7);
}
}
rule("pos loop")
{
event
{
Ongoing - Each Player;
All;
Wrecking Ball;
}
conditions
{
Is Dummy Bot(Event Player) == True;
}
actions
{
Event Player.ball_current_pos = Position Of(Event Player) Vector(0, 0.500, 0);
Event Player.ball_current_pos = Position Of(Event Player) + Vector(0, 0.500, 0);
If(Event Player.ball_previous_pos != Null);
Event Player.ball_ray_hit_pos = Ray Cast Hit Position(Event Player.ball_previous_pos, Event Player.ball_current_pos, All Players(
All Teams), Event Player, True);
If(Event Player.ball_ray_hit_pos != Event Player.ball_current_pos);
If(Has Status(Event Player, Burning) == False);
Set Status(Event Player, Null, Burning, 0.300);
Event Player.ball_ray_hit_normal = Ray Cast Hit Normal(Event Player.ball_previous_pos, Event Player.ball_current_pos, All Players(
All Teams), Event Player, True);
Apply Impulse(Event Player, Event Player.ball_ray_hit_normal, 1 * Speed Of In Direction(Event Player,
-1 * Event Player.ball_ray_hit_normal), To World, Cancel Contrary Motion);
Play Effect(All Players(All Teams), Good Pickup Effect, Purple, Event Player, 1);
Play Effect(All Players(All Teams), Ring Explosion Sound, White, Position Of(Global.theBall), 70);
End;
End;
End;
Event Player.ball_previous_pos = Event Player.ball_current_pos;
Wait(0.016, Ignore Condition);
Loop;
}
}
rule("lucio boop poke")
{
event
{
Ongoing - Each Player;
All;
Lúcio;
}
conditions
{
Is Firing Secondary(Event Player) == True;
}
actions
{
If(Is In View Angle(Event Player, Eye Position(Global.theBall), 80) == True);
disabled Small Message(Event Player, Custom String("angle OK"));
If(Distance Between(Eye Position(Event Player), Eye Position(Global.theBall)) < 6);
disabled Small Message(Event Player, Custom String("distance OK"));
If(Is In Line of Sight(Event Player, Global.theBall, Enemy Barriers Block LOS) == True);
disabled Small Message(Event Player, Custom String("LOS OK"));
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 Vertical Facing Angle Of(
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 + Vertical Facing Angle Of(
Event Player)), 18, To World, Cancel Contrary Motion);
Start Rule(BallPowerEffect, Restart Rule);
End;
End;
End;
}
}
rule("area limit power")
{
event
{
Ongoing - Each Player;
All;
All;
}
actions
{
Start Accelerating(Event Player, Direction Towards(Position Of(Event Player), Vector(0, 0.500, 0)), 100 * (Distance Between(
Position Of(Event Player), Vector(0, 0, 0)) > Global.area_radius), 20, To World, Direction Rate and Max Speed);
}
}
rule("init var,mode setting")
{
event
{
Ongoing - Global;
}
actions
{
Global.area_radius = 30;
Global.center_goal_distance = 28;
Global.Xlength_center_goalJumpPad = 24;
Global.floor_goal_height = 4;
Global.canGoal = True;
Disable Built-In Game Mode Scoring;
Global.Moira_orb_range = 6;
Global.center_sidewall_distance = 22;
Global.goal_half_length = Square Root(
Global.area_radius * Global.area_radius - Global.center_goal_distance * Global.center_goal_distance);
Global.pos_jump_pad = Vector(12.500, 0, 9);
Global.radius_jump_pad = 3.300;
Global.radius_mei_frost = 2;
Global.genji_secondary_gap_degrees[0] = -6;
Global.genji_secondary_gap_degrees[0] = -4.500;
Global.genji_secondary_gap_degrees[1] = 0;
Global.genji_secondary_gap_degrees[2] = 6;
Global.genji_secondary_gap_degrees[2] = 4.500;
Global.sigma_primary_explode_radius = 5;
Global.tracer_max_primary_force = 4;
Global.mercy_beam_natural_length = 10;
Global.mercy_beam_maximum_length = 20;
Global.hanzo_min_spd = 25;
Global.hanzo_max_spd = 110;
Global.hanzo_bomb_radius = 5;
}
}
rule("effects")
{
event
{
Ongoing - Global;
}
conditions
{
Is Game In Progress == True;
}
actions
{
Create Effect(All Players(All Teams), Sphere, Orange, Vector(0, 0, 0), Global.area_radius, Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Good Beam, Vector(-1 * Global.area_radius, 2, 1 * Global.center_sidewall_distance),
Vector(1 * Global.area_radius, 2, 1 * Global.center_sidewall_distance), Orange, Visible To);
Create Beam Effect(All Players(All Teams), Good Beam, Vector(-1 * Global.area_radius, 2, -1 * Global.center_sidewall_distance),
Vector(1 * Global.area_radius, 2, -1 * Global.center_sidewall_distance), Orange, Visible To);
For Global Variable(I_goalEffectCreation, 0, 10, 1);
Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0, 0) Vector(-1 * Global.center_goal_distance,
0.500 * Global.I_goalEffectCreation, 10), Vector(0, 0, 0) Vector(-1 * Global.center_goal_distance,
Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0, 0) + Vector(-1 * Global.center_goal_distance,
0.500 * Global.I_goalEffectCreation, 10), Vector(0, 0, 0) + Vector(-1 * Global.center_goal_distance,
0.500 * Global.I_goalEffectCreation, -10), Team 1, Visible To);
Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0, 0) Vector(1 * Global.center_goal_distance,
0.500 * Global.I_goalEffectCreation, 10), Vector(0, 0, 0) Vector(1 * Global.center_goal_distance,
Create Beam Effect(All Players(All Teams), Good Beam, Vector(0, 0, 0) + Vector(1 * Global.center_goal_distance,
0.500 * Global.I_goalEffectCreation, 10), Vector(0, 0, 0) + Vector(1 * Global.center_goal_distance,
0.500 * Global.I_goalEffectCreation, -10), Team 2, Visible To);
End;
"jump pads"
Create Effect(All Players(All Teams), Ring, Purple, Global.pos_jump_pad, Global.radius_jump_pad, Visible To);
Create Effect(All Players(All Teams), Ring, Purple, -1 * Global.pos_jump_pad, Global.radius_jump_pad, Visible To);
Create Effect(All Players(All Teams), Ring, Purple, Vector(-1 * X Component Of(Global.pos_jump_pad), 0, Z Component Of(
Global.pos_jump_pad)), Global.radius_jump_pad, Visible To);
Create Effect(All Players(All Teams), Ring, Purple, Vector(X Component Of(Global.pos_jump_pad), 0, -1 * Z Component Of(
Global.pos_jump_pad)), Global.radius_jump_pad, Visible To);
"edge of goal"
Create Effect(All Players(All Teams), Light Shaft, Team 1, Vector(-1 * Global.center_goal_distance, 0,
-1 * Global.goal_half_length), 0.500, Visible To);
Create Effect(All Players(All Teams), Light Shaft, Team 1, Vector(-1 * Global.center_goal_distance, 0,
1 * Global.goal_half_length), 0.500, Visible To);
Create Effect(All Players(All Teams), Light Shaft, Team 2, Vector(1 * Global.center_goal_distance, 0,
-1 * Global.goal_half_length), 0.500, Visible To);
Create Effect(All Players(All Teams), Light Shaft, Team 2, Vector(1 * Global.center_goal_distance, 0, 1 * Global.goal_half_length),
0.500, Visible To);
"center line"
Create Beam Effect(All Players(All Teams), Grapple Beam, Vector(0, 0.050, Global.area_radius), Vector(0, 0.050,
-1 * Global.area_radius), White, Visible To);
"goal jumppads"
Create Beam Effect(All Players(All Teams), Good Beam, Vector(1 * Global.Xlength_center_goalJumpPad, 0.050, Global.area_radius),
Vector(1 * Global.Xlength_center_goalJumpPad, 0.050, -1 * Global.area_radius), Purple, Visible To);
Create Beam Effect(All Players(All Teams), Good Beam, Vector(-1 * Global.Xlength_center_goalJumpPad, 0.050, Global.area_radius),
Vector(-1 * Global.Xlength_center_goalJumpPad, 0.050, -1 * Global.area_radius), Purple, Visible To);
}
}
rule("Sigma primary")
{
event
{
Ongoing - Each Player;
All;
Sigma;
}
conditions
{
Is Button Held(Event Player, Primary Fire) == True;
Is Alive(Event Player) == True;
}
actions
{
Event Player.sigma_primary_fired_time = Total Time Elapsed;
Create Effect(All Players(All Teams), Good Aura, Purple, Event Player.sigma_pos_primary, 0.200, Visible To Position and Radius);
Event Player.sigma_effect_primary = Last Created Entity;
Event Player.sigma_pos_primary = Eye Position(Event Player);
Event Player.sigma_spd_primary = 0.750 * Facing Direction Of(Event Player);
For Player Variable(Event Player, sigma_I_primary, 0, 20, 1);
If(Ray Cast Hit Position(Event Player.sigma_pos_primary, Event Player.sigma_pos_primary Event Player.sigma_spd_primary,
If(Ray Cast Hit Position(Event Player.sigma_pos_primary, Event Player.sigma_pos_primary + Event Player.sigma_spd_primary,
Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Null, True)
== Event Player.sigma_pos_primary Event Player.sigma_spd_primary);
Event Player.sigma_pos_primary = Event Player.sigma_spd_primary;
== Event Player.sigma_pos_primary + Event Player.sigma_spd_primary);
Event Player.sigma_pos_primary += Event Player.sigma_spd_primary;
Wait(0.050, Ignore Condition);
Else;
Event Player.sigma_pos_primary = Ray Cast Hit Position(Event Player.sigma_pos_primary,
Event Player.sigma_pos_primary Event Player.sigma_spd_primary, Append To Array(All Players(Opposite Team Of(Team Of(
Event Player.sigma_pos_primary + Event Player.sigma_spd_primary, Append To Array(All Players(Opposite Team Of(Team Of(
Event Player))), Global.theBall), Null, True);
Event Player.sigma_I_primary = 19;
End;
Event Player.sigma_spd_primary = Vector(0, -0.015, 0);
Event Player.sigma_spd_primary += Vector(0, -0.015, 0);
End;
Play Effect(All Players(All Teams), Bad Explosion, Purple, Event Player.sigma_pos_primary, Global.sigma_primary_explode_radius);
Play Effect(All Players(All Teams), Buff Explosion Sound, White, Event Player.sigma_pos_primary, 50);
If(Distance Between(Position Of(Global.theBall), Event Player.sigma_pos_primary) < Global.sigma_primary_explode_radius);
Apply Impulse(Global.theBall, Direction Towards(Position Of(Global.theBall) Vector(0, 0.800, 0), Event Player.sigma_pos_primary),
Apply Impulse(Global.theBall, Direction Towards(Position Of(Global.theBall) + Vector(0, 0.800, 0), Event Player.sigma_pos_primary),
10, To World, Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Do Nothing);
End;
Wait(0.050, Ignore Condition);
Destroy Effect(Event Player.sigma_effect_primary);
Wait(1.750 Event Player.sigma_primary_fired_time - Total Time Elapsed, Ignore Condition);
Wait(1.750 + Event Player.sigma_primary_fired_time - Total Time Elapsed, Ignore Condition);
Loop If Condition Is True;
}
}
rule("human player settings")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
}
actions
{
Set Status(Event Player, Null, Phased Out, 9999);
Disable Death Spectate All Players(Event Player);
Set Status(Event Player, Null, Invincible, 9999);
Event Player.step_in_jumppad = False;
}
}
rule("sigma shield cancel")
{
event
{
Ongoing - Each Player;
All;
Sigma;
}
conditions
{
Is Firing Secondary(Event Player) == True;
}
actions
{
Wait(0.020, Ignore Condition);
Set Secondary Fire Enabled(Event Player, False);
Wait(1.200, Ignore Condition);
Set Secondary Fire Enabled(Event Player, True);
Wait(0.020, Ignore Condition);
Press Button(Event Player, Secondary Fire);
Wait(0.020, Ignore Condition);
Set Secondary Fire Enabled(Event Player, False);
Wait(1.400, Ignore Condition);
Set Secondary Fire Enabled(Event Player, True);
}
}
rule("sigma grasp")
{
event
{
Ongoing - Each Player;
All;
Sigma;
}
conditions
{
Is Using Ability 1(Event Player) == True;
Distance Between(Eye Position(Event Player) Facing Direction Of(Event Player), Eye Position(Global.theBall)) < 2.500;
Distance Between(Eye Position(Event Player) + Facing Direction Of(Event Player), Eye Position(Global.theBall)) < 2.500;
}
actions
{
If(Is In Line of Sight(Event Player, Global.theBall, Enemy Barriers Block LOS) == True);
Call Subroutine(stopTheBall);
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -45), 11.500, To World,
Cancel Contrary Motion);
Start Rule(BallPowerEffect, Restart Rule);
Set Ability 1 Enabled(Event Player, False);
Wait(0.250, Ignore Condition);
Set Ability 1 Enabled(Event Player, True);
End;
}
}
rule("stopTheBall")
{
event
{
Subroutine;
stopTheBall;
}
actions
{
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);
Apply Impulse(Global.theBall, Up, 0.001, To World, Cancel Contrary Motion);
Apply Impulse(Global.theBall, Down, 0.001, To World, Cancel Contrary Motion);
}
}
rule("mei primary")
{
event
{
Ongoing - Each Player;
All;
Mei;
}
conditions
{
Is Firing Primary(Event Player) == True;
}
actions
{
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 10 * Facing Direction Of(Event Player),
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 10 * Facing Direction Of(Event Player),
Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 Vertical Facing Angle Of(
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 + Vertical Facing Angle Of(
Event Player)), 3.500, To World, Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Restart Rule);
Else If(Vertical Facing Angle Of(Event Player) > 7);
Modify Player Variable(Event Player, mei_frost_positions, Append To Array, Ray Cast Hit Position(Eye Position(Event Player),
Eye Position(Event Player) 10 * Facing Direction Of(Event Player), Remove From Array(All Players(Opposite Team Of(Team Of(
Eye Position(Event Player) + 10 * Facing Direction Of(Event Player), Remove From Array(All Players(Opposite Team Of(Team Of(
Event Player))), Global.theBall), Null, True));
Modify Player Variable(Event Player, mei_frost_limit_times, Append To Array, Total Time Elapsed 1);
Modify Player Variable(Event Player, mei_frost_limit_times, Append To Array, Total Time Elapsed + 1);
Play Effect(All Players(All Teams), Ring Explosion, Aqua, Last Of(Event Player.mei_frost_positions), Global.radius_mei_frost);
End;
Wait(0.240, Ignore Condition);
Loop If Condition Is True;
}
}
rule("mei frost remove")
{
event
{
Ongoing - Each Player;
All;
Mei;
}
conditions
{
Event Player.mei_frost_positions != Empty Array;
First Of(Event Player.mei_frost_limit_times) < Total Time Elapsed;
}
actions
{
Modify Player Variable(Event Player, mei_frost_positions, Remove From Array By Index, 0);
Modify Player Variable(Event Player, mei_frost_limit_times, Remove From Array By Index, 0);
}
}
rule("step mei frost")
{
event
{
Ongoing - Each Player;
All;
Mei;
}
conditions
{
Event Player.mei_frost_positions != Empty Array;
Is True For Any(Event Player.mei_frost_positions, Distance Between(Position Of(Event Player), Current Array Element)
< Global.radius_mei_frost) == True;
}
actions
{
disabled Apply Impulse(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player) Horizontal Angle From Direction(
disabled Apply Impulse(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player) + Horizontal Angle From Direction(
Throttle Of(Event Player)), 0), 6, To World, Incorporate Contrary Motion);
Set Move Speed(Event Player, 140);
Wait(0.240, Ignore Condition);
Loop If Condition Is True;
Set Move Speed(Event Player, 100);
}
}
rule("Moira primary")
{
event
{
Ongoing - Each Player;
All;
Moira;
}
conditions
{
Is Firing Primary(Event Player) == True;
}
actions
{
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 20 * Facing Direction Of(Event Player),
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 20 * Facing Direction Of(Event Player),
Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 Vertical Facing Angle Of(
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 + Vertical Facing Angle Of(
Event Player)), 2.800, To World, Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Restart Rule);
End;
Wait(0.240, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Moira secondary")
{
event
{
Ongoing - Each Player;
All;
Moira;
}
conditions
{
Is Firing Secondary(Event Player) == True;
}
actions
{
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 20 * Facing Direction Of(Event Player),
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 20 * Facing Direction Of(Event Player),
Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player) 180, -15 Vertical Facing Angle Of(
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player) + 180, -15 + Vertical Facing Angle Of(
Event Player)), 2.800, To World, Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Restart Rule);
End;
Wait(0.240, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Moira orb stop ready")
{
event
{
Ongoing - Each Player;
All;
Moira;
}
conditions
{
Is Using Ability 2(Event Player) == True;
}
actions
{
Event Player.moira_canShotOrb = True;
Disallow Button(Event Player, Ability 2);
Wait(1, Ignore Condition);
Allow Button(Event Player, Ability 2);
Press Button(Event Player, Ability 2);
Wait(0.020, Ignore Condition);
Disallow Button(Event Player, Ability 2);
Wait(0.016, Ignore Condition);
Event Player.moira_canShotOrb = False;
Wait(0.214, Ignore Condition);
Allow Button(Event Player, Ability 2);
Event Player.moira_canShotOrb = True;
}
}
rule("Moira heal orb")
{
event
{
Ongoing - Each Player;
All;
Moira;
}
conditions
{
Is Using Ability 2(Event Player) == True;
Event Player.moira_canShotOrb == True;
Is Button Held(Event Player, Primary Fire) == True;
}
actions
{
Abort If Condition Is False;
Event Player.moira_canShotOrb = False;
Small Message(Event Player, Custom String("heal orb"));
Event Player.moira_orbPos = Eye Position(Event Player);
Event Player.moira_orbIsHeal = True;
Event Player.moira_orbBirthTime = Total Time Elapsed;
Create Effect(All Players(All Teams), Good Aura, Yellow, Event Player.moira_orbPos, Global.Moira_orb_range, Visible To);
Event Player.moira_orbEffect = Last Created Entity;
Wait(10, Ignore Condition);
Wait(7, Ignore Condition);
Destroy Effect(Event Player.moira_orbEffect);
}
}
rule("Moira dmg orb")
{
event
{
Ongoing - Each Player;
All;
Moira;
}
conditions
{
Is Using Ability 2(Event Player) == True;
Event Player.moira_canShotOrb == True;
Is Button Held(Event Player, Secondary Fire) == True;
Is Button Held(Event Player, Primary Fire) == False;
}
actions
{
Abort If Condition Is False;
Event Player.moira_canShotOrb = False;
Small Message(Event Player, Custom String("dmg orb"));
Event Player.moira_orbPos = Eye Position(Event Player);
Event Player.moira_orbIsHeal = False;
Event Player.moira_orbBirthTime = Total Time Elapsed;
Create Effect(All Players(All Teams), Bad Aura, Purple, Event Player.moira_orbPos, Global.Moira_orb_range, Visible To);
Event Player.moira_orbEffect = Last Created Entity;
Wait(10, Ignore Condition);
Wait(7, Ignore Condition);
Destroy Effect(Event Player.moira_orbEffect);
}
}
rule("moira orb push pull")
{
event
{
Ongoing - Each Player;
All;
Moira;
}
conditions
{
Total Time Elapsed - Event Player.moira_orbBirthTime < 10;
Total Time Elapsed - Event Player.moira_orbBirthTime < 7;
Distance Between(Eye Position(Global.theBall), Event Player.moira_orbPos) <= Global.Moira_orb_range;
}
actions
{
If(Event Player.moira_orbIsHeal);
Apply Impulse(Global.theBall, Direction Towards(Event Player.moira_orbPos, Eye Position(Global.theBall)), 3.200, To World,
Incorporate Contrary Motion);
Else;
Apply Impulse(Global.theBall, Direction Towards(Eye Position(Global.theBall), Event Player.moira_orbPos), 3.200, To World,
Incorporate Contrary Motion);
End;
Start Rule(BallPowerEffect, Do Nothing);
Wait(0.240, Ignore Condition);
Loop If Condition Is True;
}
}
rule("rein primary")
{
event
{
Ongoing - Each Player;
All;
Reinhardt;
}
conditions
{
Is Firing Primary(Event Player) == True;
}
actions
{
Wait(0.410, Abort When False);
Event Player.rein_isSwingOdd = True;
While(Is Firing Primary(Event Player));
If(Distance Between(Eye Position(Event Player), Eye Position(Global.theBall)) < 5.200);
If(Is In View Angle(Event Player, Eye Position(Global.theBall), 80));
If(Is In Line of Sight(Eye Position(Event Player), Global.theBall, Barriers Do Not Block LOS) == True);
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player)
-30 60 * Event Player.rein_isSwingOdd, -10 Vertical Facing Angle Of(Event Player)), 11, To World,
+ -30 + 60 * Event Player.rein_isSwingOdd, -10 + Vertical Facing Angle Of(Event Player)), 11, To World,
Incorporate Contrary Motion);
Call Subroutine(BallPowerEffect);
End;
End;
End;
Event Player.rein_isSwingOdd = !Event Player.rein_isSwingOdd;
Wait(0.940, Abort When False);
End;
}
}
rule("Rein charge")
{
event
{
Ongoing - Each Player;
All;
Reinhardt;
}
conditions
{
Is Using Ability 1(Event Player) == True;
}
actions
{
Small Message(Event Player, Custom String(" "));
Wait(0.570, Ignore Condition);
Set Status(Event Player, Null, Hacked, 0.030);
Apply Impulse(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player), -16), 32, To World,
Cancel Contrary Motion);
Small Message(Event Player, Custom String(" "));
}
}
rule("Rein shield to throttle")
{
event
{
Ongoing - Each Player;
All;
Reinhardt;
}
conditions
{
Is Firing Secondary(Event Player) == True;
}
actions
{
Start Throttle In Direction(Event Player, Direction Towards(Position Of(Global.theBall), Position Of(Event Player)), 0.250,
Start Throttle In Direction(Event Player, Direction Towards(Position Of(Global.theBall), Position Of(Event Player)), 0.125,
To World, Replace existing throttle, Direction and Magnitude);
Apply Impulse(Event Player, Direction Towards(Position Of(Global.theBall), Position Of(Event Player)), 0.001, To World,
Cancel Contrary Motion);
}
}
rule("Rein stop shield to stop throttle")
{
event
{
Ongoing - Each Player;
All;
Reinhardt;
}
conditions
{
Is Firing Secondary(Event Player) == False;
}
actions
{
Stop Throttle In Direction(Event Player);
}
}
rule("BallPowerEffect")
{
event
{
Subroutine;
BallPowerEffect;
}
actions
{
Damage(Global.theBall, Event Player, 1);
Play Effect(All Players(All Teams), Good Explosion, Lime Green, Global.theBall, 0.010);
Play Effect(All Players(All Teams), Explosion Sound, White, Position Of(Global.theBall), 30);
}
}
rule("genjiSubroutine")
{
event
{
Subroutine;
genjiS_getSideShurikenDirection;
}
actions
{
Event Player.genjiS_ret_direction = Facing Direction Of(Event Player) * Cosine From Degrees(Event Player.genjiS_arg_theta_degree)
Cross Product(Event Player.genjiS_arg_axis_direction, Facing Direction Of(Event Player)) * Sine From Degrees(
+ Cross Product(Event Player.genjiS_arg_axis_direction, Facing Direction Of(Event Player)) * Sine From Degrees(
Event Player.genjiS_arg_theta_degree);
}
}
rule("genji secondary")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Is Firing Secondary(Event Player) == True;
}
actions
{
Event Player.genjiS_arg_axis_direction = Direction From Angles(Horizontal Facing Angle Of(Event Player),
-90 Vertical Facing Angle Of(Event Player));
-90 + Vertical Facing Angle Of(Event Player));
For Player Variable(Event Player, genji_I_secondary, 0, 3, 1);
Event Player.genjiS_arg_theta_degree = Global.genji_secondary_gap_degrees[Event Player.genji_I_secondary];
Call Subroutine(genjiS_getSideShurikenDirection);
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 100 * Event Player.genjiS_ret_direction,
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 100 * Event Player.genjiS_ret_direction,
Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Angle From Direction(Event Player.genjiS_ret_direction),
-10 Vertical Angle From Direction(Event Player.genjiS_ret_direction)), 2.600, To World, Incorporate Contrary Motion);
-10 + Vertical Angle From Direction(Event Player.genjiS_ret_direction)), 2.600, To World, Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Do Nothing);
End;
End;
}
}
rule("genji ability1")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Is Using Ability 1(Event Player) == True;
Distance Between(Eye Position(Event Player), Eye Position(Global.theBall)) < 2;
}
actions
{
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 Vertical Facing Angle Of(
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 + Vertical Facing Angle Of(
Event Player)), 9, To World, Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Do Nothing);
}
}
rule("genji deflect")
{
event
{
Ongoing - Each Player;
All;
Genji;
}
conditions
{
Is Using Ability 2(Event Player) == True;
Distance Between(Eye Position(Event Player), Eye Position(Global.theBall)) < 2;
Speed Of In Direction(Global.theBall, Facing Direction Of(Event Player)) < 0;
}
actions
{
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 Vertical Facing Angle Of(
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 + Vertical Facing Angle Of(
Event Player)), Absolute Value(Speed Of In Direction(Global.theBall, Facing Direction Of(Event Player))), To World,
Cancel Contrary Motion);
Play Effect(All Players(All Teams), Good Pickup Effect, Purple, Global.theBall, 1);
Play Effect(All Players(All Teams), Ring Explosion Sound, White, Position Of(Global.theBall), 70);
}
}
rule("widow scoping")
{
event
{
Ongoing - Each Player;
All;
Widowmaker;
}
conditions
{
Is Firing Secondary(Event Player) == True;
Is Firing Primary(Event Player) == False;
Is Button Held(Event Player, Secondary Fire) == True;
}
actions
{
If(Event Player.widow_isSeeingScope);
Wait(0.400, Abort When False);
Else;
Wait(0.320, Abort When False);
End;
Event Player.widow_isSeeingScope = True;
Set Status(Event Player, Null, Burning, 9999);
Event Player.widow_isCharging = True;
Disallow Button(Event Player, Jump);
}
}
rule("widow not scoping")
{
event
{
Ongoing - Each Player;
All;
Widowmaker;
}
conditions
{
disabled Is Button Held(Event Player, Secondary Fire) == False;
disabled Is Using Ability 1(Event Player) == False;
(!Is Button Held(Event Player, Secondary Fire) || Is Using Ability 1(Event Player)) == True;
}
actions
{
Clear Status(Event Player, Burning);
Event Player.widow_isCharging = False;
Stop Chasing Player Variable(Event Player, widow_charge_percent);
Event Player.widow_charge_percent = 0;
Event Player.widow_isSeeingScope = False;
Allow Button(Event Player, Jump);
}
}
rule("widow charge")
{
event
{
Ongoing - Each Player;
All;
Widowmaker;
}
conditions
{
Event Player.widow_isCharging == True;
}
actions
{
Chase Player Variable Over Time(Event Player, widow_charge_percent, 200, 1.800, None);
}
}
rule("widow snipe shot")
{
event
{
Ongoing - Each Player;
All;
Widowmaker;
}
conditions
{
Is Firing Primary(Event Player) == True;
}
actions
{
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 100 * Facing Direction Of(Event Player),
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 100 * Facing Direction Of(Event Player),
Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 Vertical Facing Angle Of(
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -10 + Vertical Facing Angle Of(
Event Player)), Event Player.widow_charge_percent * 0.080, To World, Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Do Nothing);
End;
"debug"
disabled Event Player.widow_charge_percent_shot = Event Player.widow_charge_percent;
"debug"
disabled Create In-World Text(Event Player, Event Player.widow_charge_percent_shot, Eye Position(Event Player) Facing Direction Of(
disabled Create In-World Text(Event Player, Event Player.widow_charge_percent_shot, Eye Position(Event Player) + Facing Direction Of(
Event Player), 4, Clip Against Surfaces, String, White, Default Visibility);
"debug"
disabled Event Player.widow_txt_percent_shot = Last Text ID;
Clear Status(Event Player, Burning);
Event Player.widow_isCharging = False;
Stop Chasing Player Variable(Event Player, widow_charge_percent);
Event Player.widow_charge_percent = 0;
"debug"
disabled Wait(0.250, Ignore Condition);
"debug"
disabled Destroy In-World Text(Event Player.widow_txt_percent_shot);
}
}
rule("Tracer primary")
{
event
{
Ongoing - Each Player;
All;
Tracer;
}
conditions
{
Is Firing Primary(Event Player) == True;
}
actions
{
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) 20 * Facing Direction Of(Event Player),
If(Ray Cast Hit Player(Eye Position(Event Player), Eye Position(Event Player) + 20 * Facing Direction Of(Event Player),
Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Event Player, True) == Global.theBall);
Event Player.Tracer_ball_distance = Distance Between(Position Of(Event Player), Position Of(Global.theBall));
If(Event Player.Tracer_ball_distance <= 5);
Event Player.Tracer_primary_force = Global.tracer_max_primary_force;
Else;
Event Player.Tracer_primary_force = Global.tracer_max_primary_force * (5 / Event Player.Tracer_ball_distance);
End;
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 Vertical Facing Angle Of(
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Facing Angle Of(Event Player), -15 + Vertical Facing Angle Of(
Event Player)), Event Player.Tracer_primary_force, To World, Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Restart Rule);
End;
Wait(0.240, Ignore Condition);
Loop If Condition Is True;
}
}
rule("Tracer recall")
{
event
{
Ongoing - Each Player;
All;
Tracer;
}
conditions
{
Is Using Ability 2(Event Player) == True;
}
actions
{
If(Distance Between(Position Of(Event Player), Position Of(Global.theBall)) < 1.500 && !Global.isBallRecalling);
Global.Recaller = Event Player;
Global.isBallRecalling = True;
Start Rule(stopTheBall, Do Nothing);
End;
}
}
rule("ball recall")
{
event
{
Ongoing - Global;
}
conditions
{
Global.isBallRecalling == True;
}
actions
{
Set Invisible(Global.theBall, All);
Wait(0.900, Ignore Condition);
Start Rule(stopTheBall, Do Nothing);
If(Absolute Value(X Component Of(Position Of(Global.Recaller))) > Global.center_goal_distance - 2);
Teleport(Global.theBall, Vector((Global.center_goal_distance - 2) * (X Component Of(Position Of(Global.Recaller)) / Absolute Value(
X Component Of(Position Of(Global.Recaller)))), Y Component Of(Position Of(Global.Recaller)), Z Component Of(Position Of(
Global.Recaller))));
Else;
Teleport(Global.theBall, Position Of(Global.Recaller));
End;
Set Invisible(Global.theBall, None);
Global.Recaller = Null;
Global.isBallRecalling = False;
}
}
rule("mercy primary")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Entity Exists(Global.theBall) == True;
Is Button Held(Event Player, Primary Fire) == True;
Distance Between(Eye Position(Event Player) Facing Direction Of(Event Player), Position Of(Global.theBall) Vector(0, 0.800, 0))
Distance Between(Eye Position(Event Player) + Facing Direction Of(Event Player), Position Of(Global.theBall) + Vector(0, 0.800, 0))
< Global.mercy_beam_maximum_length;
Is In View Angle(Event Player, Position Of(Global.theBall) Vector(0, 0.800, 0), 60) == True;
Is In View Angle(Event Player, Position Of(Global.theBall) + Vector(0, 0.800, 0), 60) == True;
Is In Line of Sight(Event Player, Global.theBall, Enemy Barriers Block LOS) == True;
}
actions
{
Create Beam Effect(All Players(All Teams), Good Beam, Eye Position(Event Player) Facing Direction Of(Event Player), Position Of(
Global.theBall) Vector(0, 0.800, 0), Green, Visible To Position and Radius);
Create Beam Effect(All Players(All Teams), Good Beam, Eye Position(Event Player) + Facing Direction Of(Event Player), Position Of(
Global.theBall) + Vector(0, 0.800, 0), Green, Visible To Position and Radius);
Event Player.mercy_beam_effect = Last Created Entity;
Event Player.Is_mercy_primary_looping = True;
While(Event Player.Is_mercy_primary_looping == True);
Event Player.mercy_ball_distance = Distance Between(Eye Position(Event Player) Facing Direction Of(Event Player), Position Of(
Global.theBall) Vector(0, 0.800, 0));
Event Player.mercy_ball_distance = Distance Between(Eye Position(Event Player) + Facing Direction Of(Event Player), Position Of(
Global.theBall) + Vector(0, 0.800, 0));
If(!Is Button Held(Event Player, Primary Fire) || !Is In Line of Sight(Event Player, Global.theBall, Enemy Barriers Block LOS)
|| Event Player.mercy_ball_distance >= Global.mercy_beam_maximum_length);
Event Player.Is_mercy_primary_looping = False;
Else;
If(Event Player.mercy_ball_distance > Global.mercy_beam_natural_length);
Event Player.mercy_self_move_direction = Direction Towards(Eye Position(Event Player) Facing Direction Of(Event Player),
Position Of(Global.theBall) Vector(0, 0.800, 0));
Event Player.mercy_self_move_direction = Direction Towards(Eye Position(Event Player) + Facing Direction Of(Event Player),
Position Of(Global.theBall) + Vector(0, 0.800, 0));
Else;
Event Player.mercy_self_move_direction = Direction Towards(Position Of(Global.theBall) Vector(0, 0.800, 0), Eye Position(
Event Player) Facing Direction Of(Event Player));
Event Player.mercy_self_move_direction = Direction Towards(Position Of(Global.theBall) + Vector(0, 0.800, 0), Eye Position(
Event Player) + Facing Direction Of(Event Player));
End;
Event Player.mercy_ball_primary_speed = 0.450 * Absolute Value(
Event Player.mercy_ball_distance - Global.mercy_beam_natural_length);
Apply Impulse(Event Player, Event Player.mercy_self_move_direction, Event Player.mercy_ball_primary_speed, To World,
Incorporate Contrary Motion);
Apply Impulse(Global.theBall, -1 * Event Player.mercy_self_move_direction, Event Player.mercy_ball_primary_speed, To World,
Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Do Nothing);
Wait(0.240, Ignore Condition);
End;
End;
Destroy Effect(Event Player.mercy_beam_effect);
}
}
rule("mercy shift")
{
event
{
Ongoing - Each Player;
All;
Mercy;
}
conditions
{
Is Button Held(Event Player, Ability 1) == True;
Ability Cooldown(Event Player, Button(Ability 1)) == 0;
}
actions
{
Event Player.mercy_ability1_target_player = First Of(Filtered Array(Sorted Array(Append To Array(Players in View Angle(
Event Player, Team Of(Event Player), 25), Global.theBall), Distance Between(Vector(0, 0, 0), Cross Product(Vector Towards(
Eye Position(Event Player), Eye Position(Current Array Element)), Facing Direction Of(Event Player))) / Distance Between(
Vector(0, 0, 0), Normalize(Facing Direction Of(Event Player)))), Distance Between(Position Of(Event Player), Position Of(
Current Array Element)) < 30));
disabled Event Player.mercy_ability1_target_player = First Of(Sorted Array(Append To Array(Players in View Angle(Event Player, Team Of(
Event Player), 25), Global.theBall), Distance Between(Vector(0, 0, 0), Cross Product(Vector Towards(Eye Position(Event Player),
Eye Position(Current Array Element)), Facing Direction Of(Event Player))) / Distance Between(Vector(0, 0, 0), Normalize(
Facing Direction Of(Event Player)))));
If(Event Player.mercy_ability1_target_player != Null);
Apply Impulse(Event Player, Direction From Angles(Horizontal Angle From Direction(Direction Towards(Position Of(Event Player),
Position Of(Event Player.mercy_ability1_target_player))), -15 Vertical Angle From Direction(Direction Towards(Position Of(
Event Player), Position Of(Event Player.mercy_ability1_target_player)))), 6 1.250 * Distance Between(Position Of(
Position Of(Event Player.mercy_ability1_target_player))), -15 + Vertical Angle From Direction(Direction Towards(Position Of(
Event Player), Position Of(Event Player.mercy_ability1_target_player)))), 6 + 1.250 * Distance Between(Position Of(
Event Player), Position Of(Event Player.mercy_ability1_target_player)), To World, Cancel Contrary Motion);
Wait(1.740, Ignore Condition);
Play Effect(Event Player, Buff Impact Sound, White, Event Player, 40);
disabled Wait(1.740, Ignore Condition);
Set Ability Cooldown(Event Player, Button(Ability 1), 1.750);
disabled Play Effect(Event Player, Buff Impact Sound, White, Event Player, 40);
End;
}
}
rule("hanzo shot")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Is Firing Primary(Event Player) == False;
}
actions
{
Stop Chasing Player Variable(Event Player, hanzo_spd_primary);
If(Is Button Held(Event Player, Primary Fire) == False);
If(Event Player.is_hanzo_charging);
disabled Small Message(Event Player, Event Player.hanzo_spd_primary);
Event Player.hanzo_pos_arrow = Eye Position(Event Player);
Event Player.hanzo_velocity_primary = Event Player.hanzo_spd_primary * Facing Direction Of(Event Player) / 30;
Event Player.hanzo_arrow_has_bomb = Event Player.hanzo_using_ability1;
Start Rule(hanzoS_arrow_trabel, Restart Rule);
End;
End;
Event Player.is_hanzo_charging = False;
}
}
rule("hanzo start charge")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Is Firing Primary(Event Player) == True;
}
actions
{
Event Player.is_hanzo_charging = True;
Event Player.hanzo_spd_primary = Global.hanzo_min_spd;
Chase Player Variable Over Time(Event Player, hanzo_spd_primary, Global.hanzo_max_spd, 0.750, None);
}
}
rule("hanzoS_arrow_travel")
{
event
{
Subroutine;
hanzoS_arrow_trabel;
}
actions
{
Event Player.hanzoS_arrow_travel_is_looping = True;
While(Event Player.hanzoS_arrow_travel_is_looping);
If(Ray Cast Hit Position(Event Player.hanzo_pos_arrow, Event Player.hanzo_pos_arrow Event Player.hanzo_velocity_primary,
If(Ray Cast Hit Position(Event Player.hanzo_pos_arrow, Event Player.hanzo_pos_arrow + Event Player.hanzo_velocity_primary,
Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Null, True)
== Event Player.hanzo_velocity_primary Event Player.hanzo_pos_arrow);
Event Player.hanzo_pos_arrow = Event Player.hanzo_velocity_primary;
Event Player.hanzo_velocity_primary = Vector(0, -0.015, 0);
== Event Player.hanzo_velocity_primary + Event Player.hanzo_pos_arrow);
Event Player.hanzo_pos_arrow += Event Player.hanzo_velocity_primary;
Event Player.hanzo_velocity_primary += Vector(0, -0.015, 0);
Else;
Event Player.hanzoS_arrow_travel_is_looping = False;
Start Rule(hanzoS_arrow_hit, Restart Rule);
End;
Play Effect(All Players(All Teams), Bad Explosion, Green, Event Player.hanzo_pos_arrow, 0.010);
Wait(1 / 30, Ignore Condition);
End;
}
}
rule("hanzo charge with abilit1")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Is Firing Primary(Event Player) == True;
Is Using Ability 1(Event Player) == True;
}
actions
{
Event Player.hanzo_using_ability1 = True;
}
}
rule("hanzo charge without abilit1")
{
event
{
Ongoing - Each Player;
All;
Hanzo;
}
conditions
{
Is Firing Primary(Event Player) == True;
Is Using Ability 1(Event Player) == False;
}
actions
{
Event Player.hanzo_using_ability1 = False;
}
}
rule("hanzoS_arrow_hit")
{
event
{
Subroutine;
hanzoS_arrow_hit;
}
actions
{
"hit ham"
If(Ray Cast Hit Player(Event Player.hanzo_pos_arrow, Event Player.hanzo_pos_arrow Event Player.hanzo_velocity_primary,
If(Ray Cast Hit Player(Event Player.hanzo_pos_arrow, Event Player.hanzo_pos_arrow + Event Player.hanzo_velocity_primary,
Append To Array(All Players(Opposite Team Of(Team Of(Event Player))), Global.theBall), Null, True) == Global.theBall);
Event Player.hanzo_pos_arrow = Ray Cast Hit Position(Event Player.hanzo_pos_arrow,
Event Player.hanzo_pos_arrow Event Player.hanzo_velocity_primary, Append To Array(All Players(Opposite Team Of(Team Of(
Event Player.hanzo_pos_arrow + Event Player.hanzo_velocity_primary, Append To Array(All Players(Opposite Team Of(Team Of(
Event Player))), Global.theBall), Null, True);
Apply Impulse(Global.theBall, Direction From Angles(Horizontal Angle From Direction(Event Player.hanzo_velocity_primary),
-10 Vertical Angle From Direction(Event Player.hanzo_velocity_primary)), Distance Between(Vector(0, 0, 0),
-10 + Vertical Angle From Direction(Event Player.hanzo_velocity_primary)), Distance Between(Vector(0, 0, 0),
Event Player.hanzo_velocity_primary) * (10 / 3.666), To World, Incorporate Contrary Motion);
Start Rule(BallPowerEffect, Do Nothing);
If(Event Player.hanzo_arrow_has_bomb);
Event Player.hanzo_bomb_is_bonded_to_ball = True;
Start Rule(hanzoS_bomb, Restart Rule);
End;
Else;
Event Player.hanzo_pos_arrow = Ray Cast Hit Position(Event Player.hanzo_pos_arrow,
Event Player.hanzo_pos_arrow Event Player.hanzo_velocity_primary, Append To Array(All Players(Opposite Team Of(Team Of(
Event Player.hanzo_pos_arrow + Event Player.hanzo_velocity_primary, Append To Array(All Players(Opposite Team Of(Team Of(
Event Player))), Global.theBall), Null, True);
If(Event Player.hanzo_arrow_has_bomb);
Event Player.hanzo_bomb_is_bonded_to_ball = False;
Start Rule(hanzoS_bomb, Restart Rule);
End;
End;
}
}
rule("hanzoS_bomb")
{
event
{
Subroutine;
hanzoS_bomb;
}
actions
{
If(Event Player.hanzo_bomb_is_bonded_to_ball);
"soutai"
Event Player.hanzo_pos_bomb = Event Player.hanzo_pos_arrow - (Position Of(Global.theBall) Vector(0, 0.800, 0));
Create Effect(All Players(All Teams), Sphere, Red, Event Player.hanzo_pos_bomb Position Of(Global.theBall) Vector(0, 0.800, 0),
Event Player.hanzo_pos_bomb = Event Player.hanzo_pos_arrow - (Position Of(Global.theBall) + Vector(0, 0.800, 0));
Create Effect(All Players(All Teams), Sphere, Red, Event Player.hanzo_pos_bomb + Position Of(Global.theBall) + Vector(0, 0.800, 0),
0.500, Visible To Position and Radius);
Event Player.effect_hanzo_bomb = Last Created Entity;
Wait(1, Ignore Condition);
Destroy Effect(Event Player.effect_hanzo_bomb);
Play Effect(All Players(All Teams), Good Explosion, Red, Position Of(Global.theBall) Vector(0, 0.800, 0)
Event Player.hanzo_pos_bomb, 2);
Play Effect(All Players(All Teams), Good Explosion, Red, Position Of(Global.theBall) + Vector(0, 0.800, 0)
+ Event Player.hanzo_pos_bomb, 2);
Apply Impulse(Global.theBall, -1 * Event Player.hanzo_pos_bomb, 9, To World, Cancel Contrary Motion);
Start Rule(BallPowerEffect, Do Nothing);
Else;
"zettai"
Event Player.hanzo_pos_bomb = Event Player.hanzo_pos_arrow;
Create Effect(All Players(All Teams), Sphere, Red, Event Player.hanzo_pos_bomb, 0.500, Visible To);
Event Player.effect_hanzo_bomb = Last Created Entity;
Wait(1, Ignore Condition);
Destroy Effect(Event Player.effect_hanzo_bomb);
Play Effect(All Players(All Teams), Good Explosion, Red, Event Player.hanzo_pos_bomb, 2);
If(Distance Between(Position Of(Global.theBall) Vector(0, 0.800, 0), Event Player.hanzo_pos_bomb) < Global.hanzo_bomb_radius);
If(Is In Line of Sight(Event Player.hanzo_pos_bomb, Position Of(Global.theBall) Vector(0, 0.800, 0), Enemy Barriers Block LOS));
Apply Impulse(Global.theBall, Direction Towards(Event Player.hanzo_pos_bomb, Position Of(Global.theBall) Vector(0, 0.800, 0)), 9,
If(Distance Between(Position Of(Global.theBall) + Vector(0, 0.800, 0), Event Player.hanzo_pos_bomb) < Global.hanzo_bomb_radius);
If(Is In Line of Sight(Event Player.hanzo_pos_bomb, Position Of(Global.theBall) + Vector(0, 0.800, 0), Enemy Barriers Block LOS));
Apply Impulse(Global.theBall, Direction Towards(Event Player.hanzo_pos_bomb, Position Of(Global.theBall) + Vector(0, 0.800, 0)), 9,
To World, Cancel Contrary Motion);
Start Rule(BallPowerEffect, Do Nothing);
End;
End;
End;
}
}
disabled rule("debug human player hud")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
}
actions
{
Create HUD Text(Event Player, String("{0} - {1}", String("Secondary Fire"), Is Firing Secondary(Event Player)), Null, Null, Left,
0, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", String("Primary Fire"), Is Firing Primary(Event Player)), Null, Null, Left, 0,
White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", String("Ability 2"), Is Using Ability 2(Event Player)), Null, Null, Left, 0,
White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", Custom String("moira can shot orb"), Event Player.moira_canShotOrb), Null, Null,
Left, 0, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", Custom String("jumppad step in"), Event Player.step_in_jumppad), Null, Null,
Left, 0, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", Custom String("vertical facing angle"), Vertical Facing Angle Of(Event Player)),
Null, Null, Left, 0, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", String("Ability 1"), Is Using Ability 1(Event Player)), Null, Null, Left, 0,
White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", Custom String("widow charging"), Event Player.widow_isCharging), Null, Null,
Left, 0, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", Custom String("widow charge percent"), Event Player.widow_charge_percent), Null,
Null, Left, 0, White, White, White, Visible To and String, Default Visibility);
Create HUD Text(Event Player, String("{0} - {1}", Custom String("widow is seeing scope"), Event Player.widow_isSeeingScope), Null,
Null, Left, 0, White, White, White, Visible To and String, Default Visibility);
}
}
rule("goal")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == True;
Hero Of(Event Player) == Hero(Wrecking Ball);
Global.canGoal == True;
Absolute Value(X Component Of(Position Of(Event Player))) >= Global.center_goal_distance;
(Y Component Of(Position Of(Global.theBall)) <= Global.floor_goal_height) == True;
Absolute Value(Z Component Of(Position Of(Event Player))) < Global.goal_half_length;
Global.isBallRecalling == False;
}
actions
{
Play Effect(All Players(All Teams), Buff Impact Sound, White, Event Player, 100);
Play Effect(All Players(All Teams), Ring Explosion, White, Event Player, 32);
Play Effect(All Players(All Teams), Ring Explosion, White, Event Player, 16);
If(X Component Of(Position Of(Event Player)) > 0);
Small Message(All Players(All Teams), Custom String("team 1 score!"));
Modify Team Score(Team 1, 1);
disabled Kill(Filtered Array(All Players(Team 2), Hero Of(Current Array Element) != Null), Global.theBall);
For Global Variable(I_goalKillSlot, 0, 6, 1);
Kill(Players In Slot(Global.I_goalKillSlot, Team 2), Global.theBall);
End;
Else;
Small Message(All Players(All Teams), Custom String("team 2 score!"));
Modify Team Score(Team 2, 1);
disabled Kill(Filtered Array(All Players(Team 1), Hero Of(Current Array Element) != Null), Global.theBall);
For Global Variable(I_goalKillSlot, 0, 6, 1);
Kill(Players In Slot(Global.I_goalKillSlot, Team 1), Global.theBall);
End;
End;
Global.canGoal = False;
Wait(10, Ignore Condition);
Teleport(Global.theBall, Vector(0, 0, 0));
Call Subroutine(stopTheBall);
Wait(0.020, Ignore Condition);
Global.canGoal = True;
}
}
rule("teleportToFirstPos")
{
event
{
Subroutine;
teleportToFirstPos;
}
actions
{
If(Team Of(Event Player) == Team 1);
Teleport(Event Player, Vector(0, 0, 0) Vector(-1 * Global.center_goal_distance, 0, 0));
Teleport(Event Player, Vector(0, 0, 0) + Vector(-1 * Global.center_goal_distance, 0, 0));
Wait(0.100, Ignore Condition);
Set Facing(Event Player, Vector(1, 0, 0), To World);
Else;
Teleport(Event Player, Vector(0, 0, 0) Vector(1 * Global.center_goal_distance, 0, 0));
Teleport(Event Player, Vector(0, 0, 0) + Vector(1 * Global.center_goal_distance, 0, 0));
Wait(0.100, Ignore Condition);
Set Facing(Event Player, Vector(-1, 0, 0), To World);
End;
}
}
rule("alive teleport")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Is Alive(Event Player) == True;
}
actions
{
Call Subroutine(teleportToFirstPos);
}
}
rule("spawn teleport")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Has Spawned(Event Player) == True;
}
actions
{
Call Subroutine(teleportToFirstPos);
}
}
rule("canGoal teleport")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Global.canGoal == True;
Is Dummy Bot(Event Player) == False;
}
actions
{
Call Subroutine(teleportToFirstPos);
}
}
rule("always phase out")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Dummy Bot(Event Player) == False;
Has Status(Event Player, Phased Out) == False;
}
actions
{
Set Status(Event Player, Null, Phased Out, 9999);
}
}
disabled rule("debug create bot")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Button Held(Event Player, Interact) == True;
}
actions
{
Create Dummy Bot(Hero(Ana), Team Of(Event Player), -1, Position Of(Event Player), Vector(0, 0, 0));
}
}
rule("on jump")
{
event
{
Ongoing - Each Player;
All;
All;
}
conditions
{
Is Jumping(Event Player) == True;
}
actions
{
Event Player.step_in_jumppad = Distance Between(Global.pos_jump_pad, Vector(Absolute Value(X Component Of(Position Of(
Event Player))), Y Component Of(Position Of(Event Player)), Absolute Value(Z Component Of(Position Of(Event Player)))))
< Global.radius_jump_pad ? True : False;
If(Absolute Value(X Component Of(Position Of(Event Player))) > Global.Xlength_center_goalJumpPad && Y Component Of(Position Of(
Event Player)) < 1);
Event Player.step_in_jumppad = True;
End;
If(Event Player.step_in_jumppad);
Apply Impulse(Event Player, Vector(0, 1, 0), 13, To World, Cancel Contrary Motion);
Play Effect(All Players(All Teams), Good Explosion, Sky Blue, Event Player, 2);
Play Effect(All Players(All Teams), Buff Explosion Sound, Sky Blue, Event Player, 50);
Event Player.step_in_jumppad = False;
Set Move Speed(Event Player, 130);
Wait(1, Ignore Condition);
Set Move Speed(Event Player, 100);
End;
}
}