Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "SINGLEPLAYER ONLY. by pluzorminuz. Last Update: 2021 Mar 09"
  • Description: "SINGLEPLAYER ONLY. by pluzorminuz. Last Update: 2021 Mar 20"
  • }
  • lobby
  • {
  • Max Team 1 Players: 1
  • Max Team 2 Players: 1
  • }
  • modes
  • {
  • Skirmish
  • {
  • enabled maps
  • {
  • King's Row
  • }
  • }
  • General
  • {
  • Hero Limit: Off
  • Limit Roles: 2 Of Each Role Per Team
  • Respawn Time Scalar: 50%
  • }
  • }
  • heroes
  • {
  • General
  • {
  • Ability Cooldown Time: 0%
  • Torbjörn
  • {
  • Infinite Ultimate Duration: On
  • }
  • }
  • }
  • extensions
  • {
  • Beam Effects
  • Play More Effects
  • }
  • }
  • variables
  • {
  • global:
  • 0: data
  • 1: loop_i
  • 2: map_deathplane_y
  • 100: _FX
  • player:
  • 0: hero_index
  • 1: hero_proj_data
  • 2: hero_ability_icon
  • 3: proj_g
  • 4: proj_vel
  • 5: proj_del
  • 6: proj_simtime
  • 7: proj_r
  • 8: proj_castdelay
  • 9: proj_chasedelay
  • 10: proj_fx
  • 11: proj_warning
  • 12: proj_p0
  • 13: proj_p1
  • 14: proj_p2
  • 15: proj_apex_t
  • 16: trajectory_hidden
  • 17: proj_dir
  • 18: using_ability
  • 19: player_hero
  • 20: ray_cast_t
  • 21: ray_cast_start
  • 22: ray_cast_end
  • 23: ray_cast_hit_pos
  • 24: proj_predict_land_pos
  • 25: proj_predict_land_t
  • 26: pos_mem
  • 27: poslock_bool
  • 28: poslock_posfac
  • 29: proj_p0_hidden
  • 30: proj_dir_hidden
  • 31: chasecam_bool
  • 32: chasecam_t
  • 33: chasecam_chasing
  • 34: predictcam_bool
  • 35: predictcam_dist
  • 36: eye_height
  • 37: trajlock_bool
  • 38: proj_override
  • 39: trajectory_hidden_manual
  • }
  • subroutines
  • {
  • 0: load_proj_data
  • 1: calc_proj
  • 2: swap_proj_data
  • 3: init_map_deathplane_y
  • 4: create_trajectory
  • 5: check_ability1
  • 6: hud_final
  • 7: save_trajectory_origin
  • 8: chasecam_start
  • }
  • rule("init")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Disable Inspector Recording;
  • "sphere,shaft 1.053046257,ringout 1.052807897,ringin 1.062128122"
  • Global._FX = Array(10155.377 / 10000, 10530.462 / 10000, 10528.079 / 10000, 10621.281 / 10000);
  • Global.data = Array(Array(Hero(Ana), Hero(Junkrat), Hero(Baptiste), Hero(Orisa), Hero(Zarya), Hero(Sombra), Hero(Ashe), Hero(Tracer), Hero(McCree), Hero(Mei), Hero(Torbjörn), Hero(Hanzo)), Array(Array(Array(Null, Null, Null, Null, Array(-9.840, 30, 0, 7, 0, 0, 0.350, False)), 4, Array(4, 0, 0), False), Array(Array(Array(-12.350, 25, 0.075, 7, 0, 0, 0.100, False), Null, Null, Array(-20.300, 25, 0.090, 7, 0, 0.136, 0.250, False), Array(-20.200, 10, 0.095, 7, 0, 0, 0.250, False)), 0, Array(2, 3, 0), True), Array(Array(Null, Array(-20.100, 60, 0.007, 7, 0, 0, 0.100, False), Null, Null, Array(-20.100, 60, 0.007, 7, 0, 0, 0.100, False)), 1, Array(3, 0, 6.500), True), Array(Array(Null, Null, Null, Null, Array(-9.840, 25, 0, 7, 0, 0, 0.400, False)), 4, Array(0, 0, 0), True), Array(Array(Null, Array(-9.840, 25, 0.100, 7, 0, 0, 0.500, False), Array(-9.840, 25, 0.100, 7, 0, 0, 0.500, False), Null, Null), 1, Array(2.500, 6, 0), False), Array(Array(Null, Null, Null, Null, Array(-20.200, 25, 0.090, 5, 0, 0, 0.200, False)), 4, Array(15, 0, 0), True), Array(Array(Null, Null, Null, Null, Array(-8.030, 25, 0.070, 7, 0, 0.140, 0.400, False)), 4, Array(5, 0, 0), True), Array(Array(Null, Null, Array(-30.800, 15, 0.190, 2, 0, 0, 0.150, False), Null, Null), 2, Array(5, 0, 0), True), Array(Array(Null, Null, Null, Null, Array(-9.840, 30, 0, 7 / 30, 0, 0, 0.100, False)), 4, Array(3, 0, 0), False), Array(Array(Null, Null, Array(-9.900, 20, 0.090, 7, 0, 0.468, 0.600, False), Null, Null), 2, Array(10, 0, 0), True), Array(Array(Array(-9.810, 70, 0.015, 15, 0, 0, 0.100, True), Null, Array(-30.050, 40, 0, 4, 0, 0, 0.100, True), Null, Null), 0, Array(0, 2.500, 0), True), Array(Array(Array(-9.815, 110, 0, 15, 0, 0, 0.032, True), Null, Null, Null, Array(-9.815, 110, 0, 15, 0, 0, 0.032, True)), 0, Array(0, 9, 0), False)));
  • Global.data = Array(Array(Hero(Ana), Hero(Junkrat), Hero(Baptiste), Hero(Orisa), Hero(Zarya), Hero(Sombra), Hero(Ashe), Hero(Tracer), Hero(McCree), Hero(Mei), Hero(Torbjörn), Hero(Hanzo), Hero(Sigma), Hero(Widowmaker)), Array(Array(Array(Null, Null, Null, Null, Array(-9.840, 30, 0, 7, 0, 0, 0.350, False)), 4, Array(4, 0, 0), False), Array(Array(Array(-12.350, 25, 0.075, 7, 0, 0, 0.100, False), Null, Null, Array(-20.300, 25, 0.090, 7, 0, 0.136, 0.250, False), Array(-20.200, 10, 0.095, 7, 0, 0, 0.250, False)), 0, Array(2, 3, 0), True), Array(Array(Null, Array(-20.100, 60, 0.007, 7, 0, 1, 0.100, False), Null, Null, Array(-20.100, 60, 0.007, 7, 0, 0, 0.100, False)), 0, Array(3, 0, 6.500), True), Array(Array(Null, Null, Null, Null, Array(-9.840, 25, 0, 7, 0, 0, 0.400, False)), 4, Array(0, 0, 0), True), Array(Array(Null, Array(-9.840, 25, 0.100, 7, 0, 0, 0.500, False), Array(-9.840, 25, 0.100, 7, 0, 0, 0.500, False), Null, Null), 1, Array(2.500, 6, 0), False), Array(Array(Null, Null, Null, Null, Array(-20.200, 25, 0.090, 5, 0, 0, 0.200, False)), 4, Array(15, 0, 0), True), Array(Array(Null, Null, Null, Null, Array(-8.030, 25, 0.070, 7, 0, 0.140, 0.400, False)), 4, Array(5, 0, 0), True), Array(Array(Null, Null, Array(-30.800, 15, 0.190, 2, 0, 0, 0.150, False), Null, Null), 2, Array(5, 0, 0), True), Array(Array(Null, Null, Null, Null, Array(-9.840, 30, 0, 7 / 30, 0, 0, 0.100, False)), 4, Array(3, 0, 0), False), Array(Array(Null, Null, Array(-9.900, 20, 0.090, 7, 0, 0.468, 0.600, False), Null, Null), 2, Array(10, 0, 0), True), Array(Array(Array(-9.810, 70, 0.015, 15, 0, 0, 0.100, True), Null, Array(-30.050, 40, 0, 5, 0, 0, 0.100, True), Array(-20, 17, 0, 4, 0, 0.048, 0.100, True), Null), 0, Array(2.500, 40, 0), True), Array(Array(Array(-9.815, 110, 0, 15, 0, 0, 0.032, True), Null, Null, Null, Array(-9.815, 110, 0, 15, 0, 0, 0.032, True)), 0, Array(0, 9, 0), False), Array(Array(Array(-5.954, 49.700, 0, 3 / 7, 0, 0, 0.048, False), Null, Null, Null, Array(-18.350, 37.400, 0.100, 6, 0, 0.640, 0.256, False)), 4, Array(2.500, 3, 0), True), Array(Array(Null, Null, Null, Null, Array(-9.840, 20, 0, 7, 0, 0.192, 0.160, False)), 4, Array(3, 0, 0), True)));
  • Call Subroutine(init_map_deathplane_y);
  • Call Subroutine(hud_final);
  • Call Subroutine(create_trajectory);
  • }
  • }
  • rule("init_player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Set Player Allowed Heroes(Event Player, Global.data[0]);
  • Event Player.trajectory_hidden = False;
  • Teleport(Event Player, Vector(-88.722, 2.425, -27.010));
  • }
  • }
  • rule("player_calc_proj_loop")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.chasecam_chasing != True;
  • Event Player.trajlock_bool != True;
  • }
  • actions
  • {
  • Call Subroutine(save_trajectory_origin);
  • Call Subroutine(calc_proj);
  • Wait(0.064, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("player_changed_hero")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) != Event Player.player_hero;
  • }
  • actions
  • {
  • Event Player.player_hero = Hero Of(Event Player);
  • Event Player.eye_height = Eye Position(Event Player) - Position Of(Event Player);
  • Call Subroutine(load_proj_data);
  • Event Player.hero_ability_icon = Custom String("{0}{1}{2}", Event Player.hero_proj_data[0] != Null ? Ability Icon String(Hero Of(Event Player), Button(Primary Fire)) : Custom String(""), Event Player.hero_proj_data[1] != Null ? Ability Icon String(Hero Of(Event Player), Button(Secondary Fire)) : Custom String(""), Custom String("{0}{1}{2}", Event Player.hero_proj_data[2] != Null ? Ability Icon String(Hero Of(Event Player), Button(Ultimate)) : Custom String(""), Event Player.hero_proj_data[3] != Null ? Ability Icon String(Hero Of(Event Player), Button(Ability 1)) : Custom String(""), Event Player.hero_proj_data[4] != Null ? Ability Icon String(Hero Of(Event Player), Button(Ability 2)) : Custom String("")));
  • Set Ultimate Charge(Event Player, 100);
  • If(Event Player.pos_mem != 0);
  • Teleport(Event Player, Event Player.pos_mem[0]);
  • Set Facing(Event Player, Event Player.pos_mem[1], To World);
  • End;
  • Event Player.predictcam_dist = 0.800;
  • Event Player.predictcam_bool = False;
  • Event Player.trajectory_hidden = False;
  • If(Event Player.chasecam_chasing == True);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • }
  • }
  • rule("player_action_change_hero (acknowledge)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Communicating(Event Player, Acknowledge) == True;
  • }
  • actions
  • {
  • Event Player.pos_mem = Array(Position Of(Event Player), Facing Direction Of(Event Player));
  • Set Player Allowed Heroes(Event Player, Filtered Array(All Heroes, Current Array Element != Hero Of(Event Player)));
  • Set Player Allowed Heroes(Event Player, Global.data[0]);
  • }
  • }
  • rule("player_action_refill_ult")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ultimate)) == True;
  • }
  • actions
  • {
  • Set Ultimate Charge(Event Player, 100);
  • }
  • }
  • rule("player_action_zoomout (jump)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.poslock_bool == True;
  • Is Button Held(Event Player, Button(Jump)) == True;
  • }
  • actions
  • {
  • Event Player.predictcam_dist = Max(Event Player.predictcam_dist + -0.003, 0);
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("player_action_zoomin (duck)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.poslock_bool == True;
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • }
  • actions
  • {
  • Event Player.predictcam_dist = Min(Event Player.predictcam_dist + 0.003, 1);
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("player_action_predictcam (melee)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Melee)) == True;
  • }
  • actions
  • {
  • If(Event Player.chasecam_chasing == False);
  • Event Player.predictcam_bool = !Event Player.predictcam_bool;
  • Else;
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • }
  • }
  • rule("predictcam_toggle_on")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.predictcam_bool == True;
  • }
  • actions
  • {
  • "?? cam"
  • disabled Start Camera(Event Player, Min(1, 1 - Event Player.proj_predict_land_t + Event Player.predictcam_dist) ^ 2 * Event Player.proj_p0 + 2 * Min(1, 1 - Event Player.proj_predict_land_t + Event Player.predictcam_dist) * Max(0, Event Player.proj_predict_land_t - Event Player.predictcam_dist) * Event Player.proj_p1 + Max(0, Event Player.proj_predict_land_t - Event Player.predictcam_dist) ^ 2 * Event Player.proj_p2, Event Player.proj_predict_land_pos, 10);
  • "final cam"
  • Start Camera(Event Player, (1 - Event Player.proj_predict_land_t * Event Player.predictcam_dist) ^ 2 * Event Player.proj_p0 + 2 * (1 - Event Player.proj_predict_land_t * Event Player.predictcam_dist) * Event Player.proj_predict_land_t * Event Player.predictcam_dist * Event Player.proj_p1 + (Event Player.proj_predict_land_t * Event Player.predictcam_dist) ^ 2 * Event Player.proj_p2, Event Player.proj_predict_land_pos, 10);
  • "apex cam"
  • disabled Start Camera(Event Player, (1 - Event Player.proj_apex_t) ^ 2 * Event Player.proj_p0 + 2 * (1 - Event Player.proj_apex_t) * Event Player.proj_apex_t * Event Player.proj_p1 + Event Player.proj_apex_t ^ 2 * Event Player.proj_p2 + Vector(0.800, 0, 0), (1 - Event Player.proj_apex_t) ^ 2 * Event Player.proj_p0 + 2 * (1 - Event Player.proj_apex_t) * Event Player.proj_apex_t * Event Player.proj_p1 + Event Player.proj_apex_t ^ 2 * Event Player.proj_p2, 0);
  • disabled Set Slow Motion(10);
  • }
  • }
  • rule("predictcam_toggle_off")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.predictcam_bool == False;
  • }
  • actions
  • {
  • Stop Camera(Event Player);
  • disabled Set Slow Motion(100);
  • }
  • }
  • rule("player_action_chasecam (ult status)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Communicating(Event Player, Ultimate Status) == True;
  • }
  • actions
  • {
  • Event Player.chasecam_bool = !Event Player.chasecam_bool;
  • }
  • }
  • rule("player_action_trajlock (interact)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • }
  • actions
  • {
  • Event Player.trajlock_bool = !Event Player.trajlock_bool;
  • }
  • }
  • rule("player_action_trajhide (group up)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Communicating(Event Player, Group Up) == True;
  • }
  • actions
  • {
  • Event Player.trajectory_hidden_manual = !Event Player.trajectory_hidden_manual;
  • }
  • }
  • rule("player_action_lockpos (reload)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Reload)) == True;
  • }
  • actions
  • {
  • Event Player.poslock_bool = !Event Player.poslock_bool;
  • }
  • }
  • rule("lockpos_toggle_on")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.poslock_bool == True;
  • }
  • actions
  • {
  • Disable Movement Collision With Environment(Event Player, True);
  • Event Player.poslock_posfac = Array(Eye Position(Event Player) - Event Player.eye_height, Facing Direction Of(Event Player));
  • Start Forcing Player Position(Event Player, Event Player.poslock_posfac[0], False);
  • Start Facing(Event Player, Event Player.poslock_posfac[1], 10000, To World, None);
  • }
  • }
  • rule("lockpos_toggle_off")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.poslock_bool == False;
  • }
  • actions
  • {
  • Enable Movement Collision With Environment(Event Player);
  • Stop Forcing Player Position(Event Player);
  • Stop Facing(Event Player);
  • }
  • }
  • rule("check_using_primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • disabled Is Firing Primary(Event Player) == True;
  • Event Player.proj_override == False;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • }
  • actions
  • {
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • Event Player.using_ability = 0;
  • If(Event Player.hero_proj_data[Event Player.using_ability] != Null);
  • Call Subroutine(swap_proj_data);
  • If(Event Player.chasecam_bool == True && Event Player.chasecam_chasing == False);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • End;
  • }
  • }
  • rule("check_using_secondary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • disabled Is Firing Secondary(Event Player) == True;
  • Event Player.proj_override == False;
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • }
  • actions
  • {
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • Event Player.using_ability = 1;
  • If(Event Player.hero_proj_data[Event Player.using_ability] != Null);
  • Call Subroutine(swap_proj_data);
  • If(Event Player.chasecam_bool == True && Event Player.chasecam_chasing == False);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • End;
  • }
  • }
  • rule("check_using_ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • disabled Is Using Ultimate(Event Player) == True;
  • Event Player.proj_override == False;
  • Is Button Held(Event Player, Button(Ultimate)) == True;
  • }
  • actions
  • {
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • Event Player.using_ability = 2;
  • If(Event Player.hero_proj_data[Event Player.using_ability] != Null);
  • Call Subroutine(swap_proj_data);
  • If(Event Player.chasecam_bool == True && Event Player.chasecam_chasing == False);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • End;
  • }
  • }
  • rule("check_using_ability_1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • disabled Is Using Ability 1(Event Player) == True;
  • Event Player.proj_override == False;
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • }
  • actions
  • {
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • Event Player.using_ability = 3;
  • If(Event Player.hero_proj_data[Event Player.using_ability] != Null);
  • Call Subroutine(swap_proj_data);
  • If(Event Player.chasecam_bool == True && Event Player.chasecam_chasing == False);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • End;
  • }
  • }
  • rule("check_using_ability_2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • disabled Is Using Ability 2(Event Player) == True;
  • Event Player.proj_override == False;
  • Is Button Held(Event Player, Button(Ability 2)) == True;
  • }
  • actions
  • {
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • Event Player.using_ability = 4;
  • If(Event Player.hero_proj_data[Event Player.using_ability] != Null);
  • Call Subroutine(swap_proj_data);
  • If(Event Player.chasecam_bool == True && Event Player.chasecam_chasing == False);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • End;
  • }
  • }
  • rule("Hanzo: Primary Fire Charge")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Is Using Ability 2(Event Player) != True;
  • }
  • actions
  • {
  • Event Player.proj_vel = 25;
  • Chase Player Variable At Rate(Event Player, proj_vel, 110, 120, None);
  • Wait Until(Is Button Held(Event Player, Button(Primary Fire)) == False, 99999);
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • Stop Chasing Player Variable(Event Player, proj_vel);
  • If(Event Player.chasecam_bool == True && Event Player.chasecam_chasing == False);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • }
  • }
  • rule("Hanzo: Using Storm Arrow")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • If(Event Player.chasecam_chasing != True);
  • Event Player.proj_vel = 110;
  • End;
  • }
  • }
  • rule("Hanzo: Fire Storm Arrow")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Hanzo;
  • }
  • conditions
  • {
  • Is Using Ability 2(Event Player) == True;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Event Player.chasecam_bool == True;
  • Event Player.chasecam_chasing == False;
  • }
  • actions
  • {
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • Start Rule(chasecam_start, Restart Rule);
  • }
  • }
  • rule("Torbjorn: Using Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Torbjörn;
  • }
  • conditions
  • {
  • Is Using Ultimate(Event Player) == True;
  • }
  • actions
  • {
  • If(Event Player.chasecam_chasing != True);
  • Event Player.using_ability = 2;
  • Call Subroutine(swap_proj_data);
  • End;
  • }
  • }
  • rule("Torbjorn: Rivet")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Torbjörn;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • Is Using Ultimate(Event Player) != True;
  • }
  • actions
  • {
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • If(Event Player.chasecam_chasing != True);
  • Event Player.using_ability = 0;
  • Call Subroutine(swap_proj_data);
  • End;
  • If(Event Player.chasecam_bool == True && Event Player.chasecam_chasing == False);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • }
  • }
  • rule("Torbjorn: Firing Goo")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Torbjörn;
  • }
  • conditions
  • {
  • Is Using Ultimate(Event Player) == True;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • }
  • actions
  • {
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • If(Event Player.chasecam_bool == True && Event Player.chasecam_chasing == False);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • }
  • }
  • rule("Torbjorn: Deploy Turret")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • Torbjörn;
  • }
  • conditions
  • {
  • Is Using Ultimate(Event Player) != True;
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • }
  • actions
  • {
  • "immediately snap the starting pos and fac"
  • Call Subroutine(save_trajectory_origin);
  • If(Event Player.chasecam_chasing != True);
  • Event Player.using_ability = 3;
  • Call Subroutine(swap_proj_data);
  • End;
  • If(Event Player.chasecam_bool == True && Event Player.chasecam_chasing == False);
  • Start Rule(chasecam_start, Restart Rule);
  • End;
  • }
  • }
  • rule("[sub] chasecam_start")
  • {
  • event
  • {
  • Subroutine;
  • chasecam_start;
  • }
  • actions
  • {
  • If(Event Player.chasecam_chasing == False);
  • Event Player.predictcam_bool = False;
  • Event Player.chasecam_chasing = True;
  • "immediately snap the starting pos and fac"
  • disabled Call Subroutine(save_trajectory_origin);
  • Stop Chasing Player Variable(Event Player, chasecam_t);
  • Event Player.chasecam_t = 0;
  • Event Player.trajectory_hidden = True;
  • Set Invisible(Event Player, All);
  • "then wait for the cast time if any"
  • If(Event Player.proj_castdelay > 0);
  • Wait(Event Player.proj_castdelay, Ignore Condition);
  • Call Subroutine(save_trajectory_origin);
  • End;
  • "do calc"
  • Start Rule(calc_proj, Restart Rule);
  • "start chasing immediately after casting"
  • Chase Player Variable At Rate(Event Player, chasecam_t, Event Player.proj_predict_land_t, 1 / Event Player.proj_simtime, Destination and Rate);
  • "ensures projectile correction"
  • Wait(0.016, Ignore Condition);
  • "start camera"
  • Start Camera(Event Player, Min(1 - Event Player.chasecam_t + Event Player.proj_chasedelay / Event Player.proj_simtime, 1) ^ 2 * Event Player.proj_p0 + 2 * Min(1 - Event Player.chasecam_t + Event Player.proj_chasedelay / Event Player.proj_simtime, 1) * Max(Event Player.chasecam_t - Event Player.proj_chasedelay / Event Player.proj_simtime, 0) * Event Player.proj_p1 + Max(Event Player.chasecam_t - Event Player.proj_chasedelay / Event Player.proj_simtime, 0) ^ 2 * Event Player.proj_p2, (1 - Event Player.chasecam_t) ^ 2 * Event Player.proj_p0 + 2 * (1 - Event Player.chasecam_t) * Event Player.chasecam_t * Event Player.proj_p1 + Event Player.chasecam_t ^ 2 * Event Player.proj_p2, 0);
  • "wait for proj to hit"
  • Wait(Event Player.proj_predict_land_t * Event Player.proj_simtime + Event Player.proj_chasedelay + 1.500 - 0.016, Abort When False);
  • End;
  • Stop Camera(Event Player);
  • Set Invisible(Event Player, None);
  • Event Player.trajectory_hidden = False;
  • Stop Chasing Player Variable(Event Player, chasecam_t);
  • Event Player.chasecam_t = 0;
  • Event Player.chasecam_chasing = False;
  • }
  • }
  • rule("[sub] swap_projectile_data")
  • {
  • event
  • {
  • Subroutine;
  • swap_proj_data;
  • }
  • actions
  • {
  • Event Player.proj_g = Event Player.hero_proj_data[Event Player.using_ability][0];
  • Event Player.proj_vel = Event Player.hero_proj_data[Event Player.using_ability][1];
  • Event Player.proj_del = Event Player.hero_proj_data[Event Player.using_ability][2];
  • Event Player.proj_simtime = Event Player.hero_proj_data[Event Player.using_ability][3];
  • Event Player.proj_r = Event Player.hero_proj_data[Event Player.using_ability][4];
  • Event Player.proj_castdelay = Event Player.hero_proj_data[Event Player.using_ability][5];
  • Event Player.proj_chasedelay = Event Player.hero_proj_data[Event Player.using_ability][6];
  • Event Player.proj_override = Event Player.hero_proj_data[Event Player.using_ability][7];
  • }
  • }
  • rule("[sub] obsolete")
  • {
  • event
  • {
  • Subroutine;
  • check_ability1;
  • }
  • actions
  • {
  • If(Event Player.hero_proj_data[2] != Null);
  • While(True);
  • Wait Until(!Is Using Ability 1(Event Player), 99999);
  • Wait Until(Is Using Ability 1(Event Player), 99999);
  • Small Message(All Players(All Teams), Custom String("This ability is open for chase"));
  • End;
  • End;
  • }
  • }
  • rule("[sub] map_deathplane")
  • {
  • event
  • {
  • Subroutine;
  • init_map_deathplane_y;
  • }
  • actions
  • {
  • If(Current Map == Map(Blizzard World));
  • Global.map_deathplane_y = -6.490;
  • Else If(Current Map == Map(Blizzard World Winter));
  • Global.map_deathplane_y = -6.490;
  • Else If(Current Map == Map(Dorado));
  • Global.map_deathplane_y = -9.510;
  • Else If(Current Map == Map(Eichenwalde));
  • Global.map_deathplane_y = -7.720;
  • Else If(Current Map == Map(Eichenwalde Halloween));
  • Global.map_deathplane_y = -7.710;
  • Else If(Current Map == Map(Hanamura));
  • Global.map_deathplane_y = -8.510;
  • Else If(Current Map == Map(Hanamura Winter));
  • Global.map_deathplane_y = -8.500;
  • Else If(Current Map == Map(Havana));
  • Global.map_deathplane_y = -8.500;
  • Else If(Current Map == Map(Hollywood));
  • Global.map_deathplane_y = -30.510;
  • Else If(Current Map == Map(Hollywood Halloween));
  • Global.map_deathplane_y = -30.500;
  • Else If(Current Map == Map(Horizon Lunar Colony));
  • Global.map_deathplane_y = 0.410;
  • Else If(Current Map == Map(Junkertown));
  • Global.map_deathplane_y = -5.500;
  • Else If(Current Map == Map(King's Row));
  • Global.map_deathplane_y = -18.500;
  • Else If(Current Map == Map(King's Row Winter));
  • Global.map_deathplane_y = -18.500;
  • Else If(Current Map == Map(Numbani));
  • Global.map_deathplane_y = -10.500;
  • Else If(Current Map == Map(Paris));
  • Global.map_deathplane_y = 6.150;
  • Else If(Current Map == Map(Rialto));
  • Global.map_deathplane_y = -15.500;
  • Else If(Current Map == Map(Route 66));
  • Global.map_deathplane_y = -15.500;
  • Else If(Current Map == Map(Temple of Anubis));
  • Global.map_deathplane_y = -10.500;
  • Else If(Current Map == Map(Volskaya Industries));
  • Global.map_deathplane_y = -12.500;
  • Else If(Current Map == Map(Watchpoint: Gibraltar));
  • Global.map_deathplane_y = -18.500;
  • Else If(Current Map == Map(Busan));
  • If(Objective Index == 0);
  • Global.map_deathplane_y = 0.410;
  • Else If(Objective Index == 1);
  • Global.map_deathplane_y = 2.020;
  • Else If(Objective Index == 2);
  • Global.map_deathplane_y = -8.500;
  • End;
  • Else If(Current Map == Map(Ilios));
  • If(Objective Index == 0);
  • Global.map_deathplane_y = -37.450;
  • Else If(Objective Index == 1);
  • Global.map_deathplane_y = -10.190;
  • Else If(Objective Index == 2);
  • Global.map_deathplane_y = 49.360;
  • End;
  • Else If(Current Map == Map(Nepal));
  • If(Objective Index == 0);
  • Global.map_deathplane_y = -106.180;
  • Else If(Objective Index == 1);
  • Global.map_deathplane_y = 0.840;
  • Else If(Objective Index == 2);
  • Global.map_deathplane_y = 115.150;
  • End;
  • Else If(Current Map == Map(Oasis));
  • If(Objective Index == 0);
  • Global.map_deathplane_y = -8.990;
  • Else If(Objective Index == 1);
  • Global.map_deathplane_y = -0.510;
  • Else If(Objective Index == 2);
  • Global.map_deathplane_y = 2.080;
  • End;
  • Else If(Current Map == Map(Lijiang Tower));
  • If(Objective Index == 0);
  • Global.map_deathplane_y = -12.510;
  • Else If(Objective Index == 1);
  • Global.map_deathplane_y = 82.570;
  • Else If(Objective Index == 2);
  • Global.map_deathplane_y = 250.200;
  • End;
  • Else If(Current Map == Map(Lijiang Tower Lunar New Year));
  • If(Objective Index == 0);
  • Global.map_deathplane_y = -12.510;
  • Else If(Objective Index == 1);
  • Global.map_deathplane_y = 82.570;
  • Else If(Objective Index == 2);
  • Global.map_deathplane_y = 250.200;
  • End;
  • Else If(Current Map == Map(Workshop Chamber));
  • Global.map_deathplane_y = -25.500;
  • Else If(Current Map == Map(Workshop Expanse));
  • Global.map_deathplane_y = -27;
  • Else If(Current Map == Map(Workshop Expanse Night));
  • Global.map_deathplane_y = -27;
  • Else If(Current Map == Map(Workshop Green Screen));
  • Global.map_deathplane_y = -27;
  • Else If(Current Map == Map(Workshop Island));
  • Global.map_deathplane_y = -27;
  • Else If(Current Map == Map(Workshop Island Night));
  • Global.map_deathplane_y = -27;
  • End;
  • }
  • }
  • rule("[sub] create trajectory")
  • {
  • event
  • {
  • Subroutine;
  • create_trajectory;
  • }
  • actions
  • {
  • For Global Variable(loop_i, 0, 1, 0.020);
  • "main trajectory"
  • Create Beam Effect(Filtered Array(All Players(All Teams), Current Array Element.trajectory_hidden != True && Current Array Element.trajectory_hidden_manual != True), Torbjörn Turret Sight Beam, Evaluate Once((0.980 - Global.loop_i) * (0.980 - Global.loop_i)) * Local Player.proj_p0 + Evaluate Once(2 * (Global.loop_i + 0.020) * (0.980 - Global.loop_i)) * Local Player.proj_p1 + Evaluate Once((Global.loop_i + 0.020) * (Global.loop_i + 0.020)) * Local Player.proj_p2, Evaluate Once((1 - Global.loop_i) * (1 - Global.loop_i)) * Local Player.proj_p0 + Evaluate Once(2 * Global.loop_i * (1 - Global.loop_i)) * Local Player.proj_p1 + Evaluate Once(Global.loop_i * Global.loop_i) * Local Player.proj_p2, Color(Team 1), Visible To Position and Radius);
  • Wait(0.016, Ignore Condition);
  • End;
  • "hit position marker"
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.trajectory_hidden_manual != True), Sphere, Color(Red), Local Player.proj_predict_land_pos, 0.200 * Evaluate Once(Global._FX[0]), Visible To Position and Radius);
  • "apex"
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.trajectory_hidden_manual != True), Sphere, Color(Green), (1 - Local Player.proj_apex_t) ^ 2 * Local Player.proj_p0 + 2 * (1 - Local Player.proj_apex_t) * Local Player.proj_apex_t * Local Player.proj_p1 + Local Player.proj_apex_t ^ 2 * Local Player.proj_p2, 0.200 * Evaluate Once(Global._FX[0]), Visible To Position and Radius);
  • "proj collision size"
  • disabled Create Effect(All Players(All Teams), Sphere, Color(Yellow), Local Player.proj_predict_land_pos, Local Player.proj_r * Evaluate Once(Global._FX[0]), Visible To Position and Radius);
  • "spherecast progress size"
  • disabled Create Effect(All Players(All Teams), Sphere, Color(Yellow), Local Player.ray_cast_start, Local Player.proj_r * Evaluate Once(Global._FX[0]), Visible To Position and Radius);
  • "primary range"
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.trajectory_hidden_manual != True), Sphere, Color(Sky Blue), Local Player.proj_predict_land_pos, Local Player.proj_fx[0] * Evaluate Once(Global._FX[0]), Visible To Position and Radius);
  • "secondary range"
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.trajectory_hidden_manual != True), Sphere, Color(Blue), Local Player.proj_predict_land_pos, Local Player.proj_fx[1] * Evaluate Once(Global._FX[0]), Visible To Position and Radius);
  • "cylinder range"
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.trajectory_hidden_manual != True), Light Shaft, Color(Blue), Local Player.proj_predict_land_pos, Local Player.proj_fx[2] * Evaluate Once(Global._FX[1]), Visible To Position and Radius);
  • "cylinder range (ring)"
  • Create Effect(Filtered Array(All Players(All Teams), Current Array Element.trajectory_hidden_manual != True), Ring, Color(Blue), Local Player.proj_predict_land_pos, Local Player.proj_fx[2] * Evaluate Once(Global._FX[2]), Visible To Position and Radius);
  • }
  • }
  • rule("[sub] final hud")
  • {
  • event
  • {
  • Subroutine;
  • hud_final;
  • }
  • actions
  • {
  • Create HUD Text(All Players(All Teams), Custom String("Code: XWAGN"), Custom String("Improved Nade Tool (v2.0.1.210309)"), Custom String("by pluzorminuz"), Left, -2, Color(Yellow), Color(White), Color(Aqua), Visible To, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, String("{0} - {1}", Entity Count, Text Count), String("{0} - {1} - {2}", Server Load, Server Load Average, Server Load Peak), Left, -1, Color(White), Color(Gray), Color(Gray), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Custom String("Code: XWAGN"), Custom String("Improved Nade Tool (v2.1.0.210320)"), Custom String("by pluzorminuz"), Left, -2, Color(Yellow), Color(White), Color(Aqua), Visible To, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, String("{0} - {1}", Entity Count, Text Count), String("{0} - {1} - {2}", Server Load, Server Load Average, Server Load Peak), Right, -1, Color(White), Color(Gray), Color(Gray), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Custom String("Instructions"), Null, Null, Left, 0, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Ultimate Status"), Custom String("- toggle chase camera"), Left, 0.050, Color(White), Color(Blue), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, String("{0} {1}", Button(Melee), String("({0})", Input Binding String(Button(Melee)))), Custom String("- toggle landing spot view / cancel chase cam in-progress"), Left, 0.100, Color(White), Color(Green), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, String("{0} {1}", Button(Reload), String("({0})", Input Binding String(Button(Reload)))), Custom String("- lock position and view"), Left, 0.200, Color(White), Color(Red), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, String("{0} and {1}", String("{0} {1}", Button(Jump), String("({0})", Input Binding String(Button(Jump)))), String("{0} {1}", Button(Crouch), String("({0})", Input Binding String(Button(Crouch))))), Custom String("- zoom out or in while locked and in landing spot view"), Left, 0.250, Color(White), Color(Yellow), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, String("{0} {1}", Button(Interact), String("({0})", Input Binding String(Button(Interact)))), Custom String("- toggle lock trajectory preview"), Left, 0.300, Color(White), Color(Aqua), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Acknowledge"), Custom String("- change hero"), Left, 0.400, Color(White), Color(Turquoise), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Group Up"), Custom String("- [{0}] hide trajectory / effects", Local Player.trajectory_hidden_manual ? Custom String("Hidden") : Custom String("Visible")), Left, 0.500, Color(White), Color(Lime Green), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Custom String("Stats"), Null, Null, Left, 3, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Flight Time (Approx)"), Local Player.proj_simtime * Local Player.proj_predict_land_t, Left, 3.050, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Position"), Position Of(Host Player), Left, 3.100, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Angles (Horz, Vert)"), String("{0}, {1}", Horizontal Facing Angle Of(Host Player), Vertical Facing Angle Of(Host Player)), Left, 3.200, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Position"), Position Of(Local Player), Left, 3.100, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Angles (Horz, Vert)"), String("{0}, {1}", Horizontal Facing Angle Of(Local Player), Vertical Facing Angle Of(Local Player)), Left, 3.200, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Proj Dir"), Normalize(Vector Towards((1 - Local Player.chasecam_t) * Local Player.proj_p0 + Local Player.chasecam_t * Local Player.proj_p1, (1 - Local Player.chasecam_t) * Local Player.proj_p1 + Local Player.chasecam_t * Local Player.proj_p2)), Left, 100, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • "B'(t) definition"
  • Create HUD Text(All Players(All Teams), Null, Custom String("Proj Speed"), Distance Between(2 * (1 - Local Player.chasecam_t) * (Local Player.proj_p1 - Local Player.proj_p0) + 2 * Local Player.chasecam_t * (Local Player.proj_p2 - Local Player.proj_p1), 0 * Up) / Local Player.proj_simtime, Left, 100.100, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("land_pos_t / ray_cast_t"), String("{0}, {1}", Local Player.proj_predict_land_t, Local Player.ray_cast_t), Left, 101, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element.trajlock_bool == True), Custom String("Trajectory Preview Locked."), Null, Null, Top, 1, Color(Aqua), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element.poslock_bool == True), Custom String("LOCK ENGAGED! {0}: Zoom Out, {1}: Zoom In", Input Binding String(Button(Jump)), Input Binding String(Button(Crouch))), Null, Null, Top, 2, Color(Red), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element.chasecam_bool == True), Custom String("Chase Camera On. Activate Ability ({0}) to start camera.", Local Player.hero_ability_icon), Null, Null, Top, 3, Color(Blue), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Current Array Element.proj_warning == True), Custom String("NON-ZERO PROJECTILE RADIUS. TRAJECTORY MAY NOT MATCH"), Null, Null, Top, 4, Color(Red), Color(White), Color(White), Visible To, Default Visibility);
  • disabled Create HUD Text(All Players(All Teams), Local Player.proj_override, Null, Null, Right, 0, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • disabled Create HUD Text(All Players(All Teams), Local Player.proj_override, Null, Null, Right, 0, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("[sub] load_proj_data")
  • {
  • event
  • {
  • Subroutine;
  • load_proj_data;
  • }
  • actions
  • {
  • Event Player.hero_index = Index Of Array Value(Global.data[0], Hero Of(Event Player));
  • Event Player.hero_proj_data = Global.data[1][Event Player.hero_index][0];
  • Event Player.proj_fx = Global.data[1][Event Player.hero_index][2];
  • Event Player.proj_warning = Global.data[1][Event Player.hero_index][3];
  • Event Player.using_ability = Global.data[1][Event Player.hero_index][1];
  • Call Subroutine(swap_proj_data);
  • disabled Event Player.proj_g = Event Player.hero_proj_data[Global.data[1][Event Player.hero_index][1]][0];
  • disabled Event Player.proj_vel = Event Player.hero_proj_data[Global.data[1][Event Player.hero_index][1]][1];
  • disabled Event Player.proj_del = Event Player.hero_proj_data[Global.data[1][Event Player.hero_index][1]][2];
  • disabled Event Player.proj_simtime = Event Player.hero_proj_data[Global.data[1][Event Player.hero_index][1]][3];
  • disabled Event Player.proj_r = Event Player.hero_proj_data[Global.data[1][Event Player.hero_index][1]][4];
  • disabled Event Player.proj_castdelay = Event Player.hero_proj_data[Global.data[1][Event Player.hero_index][1]][5];
  • disabled Event Player.proj_chasedelay = Event Player.hero_proj_data[Global.data[1][Event Player.hero_index][1]][6];
  • }
  • }
  • rule("[sub] save_eye_and_fac")
  • {
  • event
  • {
  • Subroutine;
  • save_trajectory_origin;
  • }
  • actions
  • {
  • Event Player.proj_p0_hidden = Eye Position(Event Player);
  • Event Player.proj_dir_hidden = Vertical Facing Angle Of(Event Player) < -89 ? Up : (Vertical Facing Angle Of(Event Player) > 89 ? Down : Normalize(Facing Direction Of(Event Player) + Event Player.proj_del * Up));
  • }
  • }
  • rule("[sub] calculate_projectile_parameters")
  • {
  • event
  • {
  • Subroutine;
  • calc_proj;
  • }
  • actions
  • {
  • Event Player.proj_p0 = Event Player.proj_p0_hidden;
  • Event Player.proj_dir = Event Player.proj_dir_hidden;
  • Event Player.proj_p1 = Event Player.proj_p0 + 0.500 * Event Player.proj_vel * Event Player.proj_simtime * Event Player.proj_dir;
  • Event Player.proj_p2 = Event Player.proj_p0 + Event Player.proj_vel * Event Player.proj_simtime * Event Player.proj_dir + 0.500 * Event Player.proj_simtime * Event Player.proj_simtime * Event Player.proj_g * Up;
  • Event Player.proj_apex_t = -1 * Y Component Of(Event Player.proj_dir) * Event Player.proj_vel / Event Player.proj_g / Event Player.proj_simtime;
  • If(Host Player == Event Player);
  • If(Event Player.proj_r == 0);
  • For Player Variable(Event Player, ray_cast_t, 0, 1, 0.002);
  • Event Player.ray_cast_start = Evaluate Once((1 - Event Player.ray_cast_t) * (1 - Event Player.ray_cast_t)) * Event Player.proj_p0 + Evaluate Once(2 * (1 - Event Player.ray_cast_t) * Event Player.ray_cast_t) * Event Player.proj_p1 + Evaluate Once(Event Player.ray_cast_t * Event Player.ray_cast_t) * Event Player.proj_p2;
  • If(Y Component Of(Event Player.ray_cast_start) < Global.map_deathplane_y);
  • Break;
  • End;
  • Event Player.ray_cast_end = Evaluate Once((0.998 - Event Player.ray_cast_t) * (0.998 - Event Player.ray_cast_t)) * Event Player.proj_p0 + Evaluate Once(2 * (0.998 - Event Player.ray_cast_t) * (Event Player.ray_cast_t + 0.002)) * Event Player.proj_p1 + Evaluate Once((Event Player.ray_cast_t + 0.002) * (Event Player.ray_cast_t + 0.002)) * Event Player.proj_p2;
  • Event Player.ray_cast_hit_pos = Ray Cast Hit Position(Event Player.ray_cast_start, Event Player.ray_cast_end, Null, Event Player, True);
  • "hit something"
  • If(Event Player.ray_cast_hit_pos != Event Player.ray_cast_end);
  • Break;
  • End;
  • End;
  • "adjustment term"
  • Event Player.proj_predict_land_t = Event Player.ray_cast_t + 0.002 * (Distance Between(Event Player.ray_cast_start, Event Player.ray_cast_hit_pos) / Distance Between(Event Player.ray_cast_start, Event Player.ray_cast_end));
  • Event Player.proj_predict_land_pos = Event Player.ray_cast_hit_pos;
  • Wait(0.064, Ignore Condition);
  • Else;
  • Wait(0.016, Ignore Condition);
  • End;
  • End;
  • }
  • }
Join the Workshop.codes Discord