Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "A tool to visualise the size of many projectile and hitscan abilities. By Mitsiee"
  • }
  • lobby
  • {
  • Allow Players Who Are In Queue: Yes
  • Max Spectators: 0
  • Max Team 1 Players: 4
  • Max Team 2 Players: 0
  • }
  • modes
  • {
  • Skirmish
  • {
  • enabled maps
  • {
  • Workshop Chamber
  • }
  • }
  • General
  • {
  • Limit Roles: 2 Of Each Role Per Team
  • }
  • }
  • heroes
  • {
  • General
  • {
  • No Ammunition Requirement: On
  • Ultimate Generation: 10%
  • Ultimate Generation - Combat: 0%
  • Ultimate Generation - Passive: 0%
  • Ana
  • {
  • Biotic Grenade: Off
  • No Ammunition Requirement: On
  • Sleep Dart: Off
  • Ultimate Generation - Combat Nano Boost: 0%
  • Ultimate Generation - Passive Nano Boost: 0%
  • Ultimate Generation Nano Boost: 10%
  • }
  • Ashe
  • {
  • Coach Gun: Off
  • Dynamite: Off
  • No Ammunition Requirement: On
  • Ultimate Generation - Combat B.O.B.: 0%
  • Ultimate Generation - Passive B.O.B.: 0%
  • Ultimate Generation B.O.B.: 10%
  • }
  • Baptiste
  • {
  • Immortality Field: Off
  • No Ammunition Requirement: On
  • Regenerative Burst: Off
  • Secondary Fire: Off
  • Ultimate Generation - Combat Amplification Matrix: 0%
  • Ultimate Generation - Passive Amplification Matrix: 0%
  • Ultimate Generation Amplification Matrix: 10%
  • }
  • Bastion
  • {
  • Configuration: Tank Weapon Knockback Scalar: 0%
  • No Ammunition Requirement: On
  • Self-Repair: Off
  • Spawn With Ultimate Ready: On
  • Ultimate Generation - Combat Configuration: Tank: 500%
  • Ultimate Generation - Passive Configuration: Tank: 500%
  • Ultimate Generation Configuration: Tank: 500%
  • }
  • D.Va
  • {
  • Spawn Without Mech: On
  • }
  • Echo
  • {
  • Flight: Off
  • Focusing Beam: Off
  • Glide: Off
  • No Ammunition Requirement: On
  • Quick Melee: Off
  • Sticky Bombs: Off
  • Ultimate Generation - Combat Duplicate: 0%
  • Ultimate Generation - Passive Duplicate: 0%
  • Ultimate Generation Duplicate: 10%
  • }
  • Genji
  • {
  • Deflect: Off
  • No Ammunition Requirement: On
  • Secondary Fire: Off
  • Swift Strike: Off
  • Ultimate Generation - Combat Dragonblade: 0%
  • Ultimate Generation - Passive Dragonblade: 0%
  • Ultimate Generation Dragonblade: 10%
  • }
  • Junkrat
  • {
  • Frag Launcher Knockback Scalar: 0%
  • }
  • Lúcio
  • {
  • Soundwave Knockback Scalar: 0%
  • }
  • McCree
  • {
  • Combat Roll: Off
  • Flashbang: Off
  • No Ammunition Requirement: On
  • Secondary Fire: Off
  • Ultimate Generation - Combat Deadeye: 0%
  • Ultimate Generation - Passive Deadeye: 0%
  • Ultimate Generation Deadeye: 10%
  • }
  • Mei
  • {
  • Cryo-Freeze: Off
  • Ice Wall: Off
  • No Ammunition Requirement: On
  • Primary Fire: Off
  • Ultimate Generation - Combat Blizzard: 0%
  • Ultimate Generation - Passive Blizzard: 0%
  • Ultimate Generation Blizzard: 10%
  • }
  • Mercy
  • {
  • Guardian Angel: Off
  • No Ammunition Requirement: On
  • Resurrect: Off
  • Ultimate Generation - Combat Valkyrie: 0%
  • Ultimate Generation - Passive Valkyrie: 0%
  • Ultimate Generation Valkyrie: 10%
  • Weapons Enabled: Caduceus Blaster Only
  • }
  • Orisa
  • {
  • Fortify: Off
  • Halt!: Off
  • No Ammunition Requirement: On
  • Protective Barrier: Off
  • Ultimate Generation - Combat Supercharger: 0%
  • Ultimate Generation - Passive Supercharger: 0%
  • Ultimate Generation Supercharger: 10%
  • }
  • Pharah
  • {
  • Concussive Blast Cooldown Time: 10%
  • Rocket Launcher Knockback Scalar: 0%
  • }
  • Reinhardt
  • {
  • Fire Strike Cooldown Time: 10%
  • Rocket Hammer Knockback Scalar: 0%
  • }
  • Soldier: 76
  • {
  • Biotic Field: Off
  • Helix Rockets Cooldown Time: 10%
  • Helix Rockets Knockback Scalar: 0%
  • No Ammunition Requirement: On
  • Sprint: Off
  • Ultimate Generation - Combat Tactical Visor: 0%
  • Ultimate Generation - Passive Tactical Visor: 0%
  • Ultimate Generation Tactical Visor: 10%
  • }
  • Widowmaker
  • {
  • Grappling Hook: Off
  • No Ammunition Requirement: On
  • Quick Melee: Off
  • Ultimate Generation - Combat Infra-Sight: 0%
  • Ultimate Generation - Passive Infra-Sight: 0%
  • Ultimate Generation Infra-Sight: 10%
  • Venom Mine: Off
  • }
  • Wrecking Ball
  • {
  • Adaptive Shield: Off
  • Grappling Claw: Off
  • No Ammunition Requirement: On
  • Piledriver: Off
  • Roll: Off
  • Ultimate Generation - Combat Minefield: 0%
  • Ultimate Generation - Passive Minefield: 0%
  • Ultimate Generation Minefield: 10%
  • }
  • Zarya
  • {
  • Particle Cannon Secondary Knockback Scalar: 0%
  • }
  • Zenyatta
  • {
  • No Ammunition Requirement: On
  • Orb of Discord: Off
  • Orb of Harmony: Off
  • Secondary Fire: Off
  • Ultimate Generation - Combat Transcendence: 0%
  • Ultimate Generation - Passive Transcendence: 0%
  • Ultimate Generation Transcendence: 10%
  • }
  • disabled heroes
  • {
  • Brigitte
  • Doomfist
  • Echo
  • Moira
  • Reaper
  • Roadhog
  • Sigma
  • Sombra
  • Symmetra
  • Tracer
  • Winston
  • }
  • }
  • }
  • workshop
  • {
  • Max projectile effects per player : 30
  • }
  • }
  • variables
  • {
  • global:
  • 0: ProjectileHeroes
  • 1: EffectColorIndex
  • 2: EffectColorArray
  • 3: EffectColor
  • 4: MaxEffectsPerPlayer
  • 5: BotSpawnPositions
  • player:
  • 0: RaycastPrimaryFire
  • 1: ShootLoop
  • 2: CurrentCheckPosition
  • 3: RaycastDistance
  • 4: IsProjectileHero
  • 5: ProjectileSpeed
  • 6: ProjectileDelay
  • 7: ProjectileSize
  • 8: FacingDirection
  • 9: EyePositionWhenFired
  • 11: ProjectileTimeBetweenShots
  • 12: ProjectileRadiusPlayerHit
  • 13: ProjectileRadiusArray
  • 14: ProjectileRadiusArrayLoop
  • 15: ExplosionRadius
  • 16: CurrentEffectLoop
  • 17: ProjectileIsMoving
  • 18: NoDamageDealt
  • 19: ProjectilePathEffects
  • 20: ShowBeamEffects
  • 21: EffectCreationLoop
  • }
  • subroutines
  • {
  • 0: ProjectileRadiusCheck
  • 1: TrackProjectileEffect
  • 2: ClearProjectileEffects
  • 3: ClearBeamEffects
  • 4: FiringWeapon
  • }
  • disabled rule("--- HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Current hero info HUD")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • "HUD that holds some hero projectile stats"
  • Create HUD Text(Event Player, Null, Custom String("{2} Projectile radius: {0}m | Projectile speed: {1}m/s",
  • Event Player.ProjectileSize, Event Player.ProjectileSpeed, Hero Icon String(Hero Of(Event Player))), Null, Left, -2, White,
  • White, White, Visible To and String, Default Visibility);
  • Event Player.ProjectileSize, Event Player.ProjectileSpeed, Hero Icon String(Hero Of(Event Player))), Null, Left, -2, Color(
  • White), Color(White), Color(White), Visible To and String, Default Visibility);
  • "HUD that shows Explosion radius and Projectile delay if they are specified"
  • Create HUD Text(Filtered Array(Event Player, Event Player.ProjectileDelay != 0 || Event Player.ExplosionRadius != 0), Null,
  • Custom String("Explosion radius: {0}m | Projectile delay: {1}s", Event Player.ExplosionRadius, Event Player.ProjectileDelay),
  • Null, Left, -1, White, White, White, Visible To and String, Default Visibility);
  • Null, Left, -1, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • "HUD that holds server stats"
  • Create HUD Text(Event Player, Null, Custom String("Load: {0} | Average: {1} | Peak: {2}", Server Load, Server Load Average,
  • Server Load Peak), Null, Right, 0, White, White, White, Visible To and String, Default Visibility);
  • Server Load Peak), Null, Right, 0, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("Controls HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Controls to remove all effects"
  • Create HUD Text(All Players(All Teams), Null, Custom String("Press [Ability 1] + [Interact] to remove all your effects"), Null,
  • Right, 2, White, Sky Blue, White, Visible To and String, Default Visibility);
  • Right, 2, Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
  • "Controls to change hero"
  • Create HUD Text(All Players(All Teams), Null, Custom String("Press [Crouch] + [Reload] + [Jump] to change hero"), Null, Right, 3,
  • White, Sky Blue, White, Visible To and String, Default Visibility);
  • Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
  • "Controls to spawn dummy bot"
  • Create HUD Text(All Players(All Teams), Null, Custom String("Press [Crouch] + [Interact] to spawn a random dummy bot"), Null,
  • Right, 4, White, Sky Blue, White, Visible To and String, Default Visibility);
  • Right, 4, Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
  • "Controls to toggle if player deals damage"
  • Create HUD Text(All Players(All Teams), Null, Custom String("Press [Crouch] + [Ultimate] to toggle damage dealt"), Null, Right, 5,
  • White, Sky Blue, White, Visible To and String, Default Visibility);
  • Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
  • "Controls to toggle projectile path"
  • Create HUD Text(All Players(All Teams), Null, Custom String("Press [Ability 1] + [Ability 2] toggle path of latest projectile"),
  • Null, Right, 6, White, Sky Blue, White, Visible To and String, Default Visibility);
  • Null, Right, 6, Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("Per hero info HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Lucio"
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Lúcio)), Null, Custom String(
  • "Only the first projectile is simulated."), Null, Left, 0, White, Red, White, Visible To and String, Default Visibility);
  • "Only the first projectile is simulated."), Null, Left, 0, Color(White), Color(Red), Color(White), Visible To and String,
  • Default Visibility);
  • "Genji"
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Genji)), Null, Custom String(
  • "Only the first projectile is simulated. Secondary fire is disabled but projectile width is the same."), Null, Left, 0, White,
  • Red, White, Visible To and String, Default Visibility);
  • "Only the first projectile is simulated. Secondary fire is disabled but projectile width is the same."), Null, Left, 0, Color(
  • White), Color(Red), Color(White), Visible To and String, Default Visibility);
  • "Reinhardt"
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Reinhardt)), Null, Custom String(
  • "Only Firestrike is simulated."), Null, Left, 0, White, Red, White, Visible To and String, Default Visibility);
  • "Only Firestrike is simulated."), Null, Left, 0, Color(White), Color(Red), Color(White), Visible To and String,
  • Default Visibility);
  • "Junkrat"
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Junkrat)), Null, Custom String(
  • "Gravity is disabled. Bounces are not accounted for."), Null, Left, 0, White, Red, White, Visible To and String,
  • Default Visibility);
  • "Gravity is disabled. Bounces are not accounted for."), Null, Left, 0, Color(White), Color(Red), Color(White),
  • Visible To and String, Default Visibility);
  • "Hanzo"
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Hanzo)), Null, Custom String(
  • "Gravity is disabled. All projectiles have the same width."), Null, Left, 0, White, Red, White, Visible To and String,
  • Default Visibility);
  • "Gravity is disabled. All projectiles have the same width."), Null, Left, 0, Color(White), Color(Red), Color(White),
  • Visible To and String, Default Visibility);
  • "Soldier"
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Soldier: 76)), Null, Custom String(
  • "Fire rate is slowed down. Shots have no width. Helix Rocket does."), Null, Left, 0, White, Red, White, Visible To and String,
  • Default Visibility);
  • "Fire rate is slowed down. Shots have no width. Helix Rocket does."), Null, Left, 0, Color(White), Color(Red), Color(White),
  • Visible To and String, Default Visibility);
  • "Pharah"
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Pharah)), Null, Custom String(
  • "Firing while flying will result in incorrect measurements.\r\nConcussive blast and Primary fire have vastly different values."),
  • Null, Left, 0, White, Red, White, Visible To and String, Default Visibility);
  • Null, Left, 0, Color(White), Color(Red), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • disabled rule("--- Initialise")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Initialise settings")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Let users choose the max number of effects that can be present at one time."
  • Global.EffectColorIndex = Workshop Setting Combo(Custom String("Config"), Custom String("Projectile effect color"), 0, Array(
  • Custom String("Sky Blue"), Custom String("White"), Custom String("Green"), Custom String("Orange"), Custom String("Black"),
  • Custom String("Purple")), 0);
  • "Create array of colors that will be used to pick a color through Workshop Settings"
  • Global.EffectColorArray = Array(Color(Sky Blue), Color(White), Color(Green), Color(Orange), Color(Black), Color(Purple));
  • "Set the effect color of projectile effects to the chosen color."
  • Global.EffectColor = Global.EffectColorArray[Global.EffectColorIndex];
  • "Change the maximum number of effects allowed to be present at one time."
  • Global.MaxEffectsPerPlayer = Workshop Setting Integer(Custom String("Config"), Custom String("Max projectile effects per player "),
  • 10, 1, 30, 1000);
  • "Positions where bots will be spawned"
  • Global.BotSpawnPositions = Array(Vector(-8, 0, 0), Vector(-8, 0, 8), Vector(-8, 0, -8));
  • }
  • }
  • rule("Initialise player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.ProjectileIsMoving = True;
  • Set Projectile Gravity(Event Player, 0);
  • }
  • }
  • rule("Spawn bots")
  • rule("Spawn initial bots")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Spawn 3 bots, facing towards the middle of the room"
  • Create Dummy Bot(Random Value In Array(All Heroes), Team 2, -1, Global.BotSpawnPositions[0], Direction Towards(
  • Global.BotSpawnPositions[0], Vector(0, 1.500, 0)));
  • Create Dummy Bot(Random Value In Array(All Heroes), Team 2, -1, Global.BotSpawnPositions[1], Direction Towards(
  • Global.BotSpawnPositions[1], Vector(0, 1.500, 0)));
  • Create Dummy Bot(Random Value In Array(All Heroes), Team 2, -1, Global.BotSpawnPositions[2], Direction Towards(
  • Global.BotSpawnPositions[2], Vector(0, 1.500, 0)));
  • }
  • }
  • rule("Spawn bots at player with Crouch + Interact")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Crouch) == True;
  • Is Button Held(Event Player, Interact) == True;
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • }
  • actions
  • {
  • "Spawn random dummy bot in front of the player, facing away from the player"
  • Create Dummy Bot(Random Value In Array(All Heroes), Opposite Team Of(Team Of(Event Player)), -1,
  • Event Player + Facing Direction Of(Event Player) * 0.500, Facing Direction Of(Event Player));
  • }
  • }
  • rule("Freeze and root bots")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • "Wait a little, just in case"
  • Wait(1.500, Ignore Condition);
  • Set Status(Event Player, Null, Frozen, 9999);
  • Set Status(Event Player, Null, Rooted, 9999);
  • }
  • }
  • rule("Swap hero")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Crouch) == True;
  • Is Button Held(Event Player, Reload) == True;
  • Is Button Held(Event Player, Jump) == True;
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Is Button Held(Event Player, Button(Reload)) == True;
  • Is Button Held(Event Player, Button(Jump)) == True;
  • }
  • actions
  • {
  • Call Subroutine(ClearProjectileEffects);
  • Set Player Allowed Heroes(Event Player, Remove From Array(All Heroes, Hero Of(Event Player)));
  • Wait(0.250, Ignore Condition);
  • Reset Player Hero Availability(Event Player);
  • }
  • }
  • rule("Create Projectile Heroes array")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "All projectile heroes that are currently available"
  • Global.ProjectileHeroes = Array(Hero(Ana), Hero(Echo), Hero(Genji), Hero(Mei), Hero(Mercy), Hero(Orisa), Hero(Zenyatta), Hero(
  • Pharah), Hero(Reinhardt), Hero(D.Va), Hero(Junkrat), Hero(Torbjörn), Hero(Hanzo), Hero(Zarya), Hero(Lúcio));
  • }
  • }
  • rule("Is Projectile Hero? Set projectile settings")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) == True;
  • }
  • actions
  • {
  • Event Player.IsProjectileHero = True;
  • "Set default values"
  • Event Player.ProjectileDelay = 0;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • "Set values per hero"
  • If(Hero Of(Event Player) == Hero(Echo));
  • Event Player.ProjectileSpeed = 75;
  • Event Player.ProjectileSize = 0.500;
  • Else If(Hero Of(Event Player) == Hero(Mei));
  • Event Player.ProjectileSpeed = 115;
  • Event Player.ProjectileDelay = 0.400;
  • Event Player.ProjectileSize = 0.150;
  • Else If(Hero Of(Event Player) == Hero(Ana));
  • Event Player.ProjectileSpeed = 125;
  • Event Player.ProjectileSize = 0;
  • Else If(Hero Of(Event Player) == Hero(Genji));
  • Event Player.ProjectileSpeed = 60;
  • Event Player.ProjectileSize = 0.100;
  • Else If(Hero Of(Event Player) == Hero(Orisa));
  • Event Player.ProjectileSpeed = 90;
  • Event Player.ProjectileSize = 0.100;
  • Event Player.ProjectileTimeBetweenShots = 1 / 12;
  • Else If(Hero Of(Event Player) == Hero(Mercy));
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ProjectileSize = 0.250;
  • Event Player.ProjectileTimeBetweenShots = 1 / 5;
  • Else If(Hero Of(Event Player) == Hero(Zenyatta));
  • Event Player.ProjectileSpeed = 90;
  • Event Player.ProjectileSize = 0.150;
  • Else If(Hero Of(Event Player) == Hero(Pharah));
  • Event Player.ProjectileSpeed = 35;
  • Event Player.ProjectileSize = 0.200;
  • Event Player.ExplosionRadius = 2.500;
  • Else If(Hero Of(Event Player) == Hero(Reinhardt));
  • Event Player.ProjectileSpeed = 25;
  • Event Player.ProjectileDelay = 0.480;
  • Event Player.ProjectileSize = 0.850;
  • Else If(Hero Of(Event Player) == Hero(D.Va));
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ProjectileSize = 0.250;
  • Else If(Hero Of(Event Player) == Hero(Junkrat));
  • Event Player.ProjectileSpeed = 25;
  • Event Player.ProjectileSize = 0.200;
  • Event Player.ExplosionRadius = 2;
  • Else If(Hero Of(Event Player) == Hero(Torbjörn));
  • Event Player.ProjectileSpeed = 70;
  • Event Player.ProjectileSize = 0.100;
  • Else If(Hero Of(Event Player) == Hero(Hanzo));
  • Event Player.ProjectileSpeed = 110;
  • Event Player.ProjectileSize = 0.100;
  • Else If(Hero Of(Event Player) == Hero(Zarya));
  • Event Player.ProjectileSpeed = 25;
  • Event Player.ProjectileSize = 0.200;
  • Event Player.ExplosionRadius = 2.500;
  • Else If(Hero Of(Event Player) == Hero(Lúcio));
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ProjectileSize = 0.150;
  • End;
  • }
  • }
  • rule("Is not projectile hero?")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) != True;
  • }
  • actions
  • {
  • Event Player.IsProjectileHero = False;
  • Event Player.ProjectileSize = 0;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSpeed = 0;
  • Event Player.ExplosionRadius = 0;
  • }
  • }
  • disabled rule("--- Special case value adjustments")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Ana in scope")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Ana);
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • "Projectile speed per second"
  • Event Player.ProjectileSpeed = 0;
  • }
  • }
  • rule("Ana not in scope")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Ana);
  • Is Firing Secondary(Event Player) != True;
  • }
  • actions
  • {
  • "Projectile speed per second"
  • Event Player.ProjectileSpeed = 125;
  • }
  • }
  • rule("Bastion in ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Bastion);
  • Is Using Ultimate(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.IsProjectileHero = True;
  • Event Player.ProjectileSize = 0.300;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSpeed = 60;
  • Event Player.ExplosionRadius = 4;
  • Call Subroutine(ClearProjectileEffects);
  • }
  • }
  • rule("Bastion not in ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Bastion);
  • Is Using Ultimate(Event Player) != True;
  • }
  • actions
  • {
  • Event Player.IsProjectileHero = False;
  • Event Player.ProjectileSize = 0;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSpeed = 0;
  • Event Player.ExplosionRadius = 0;
  • Call Subroutine(ClearProjectileEffects);
  • Set Ultimate Charge(Event Player, 100);
  • }
  • }
  • rule("Soldier Helix Rocket")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Soldier: 76);
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.IsProjectileHero = True;
  • Event Player.ProjectileSize = 0.200;
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ExplosionRadius = 3;
  • Call Subroutine(ClearProjectileEffects);
  • }
  • }
  • rule("Soldier Firing primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Soldier: 76);
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.IsProjectileHero = False;
  • Event Player.ProjectileSize = 0;
  • Event Player.ProjectileSpeed = 0;
  • Event Player.ExplosionRadius = 0;
  • }
  • }
  • rule("Pharah firing Concussive Blast")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Pharah);
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.ProjectileSize = 0;
  • Event Player.ProjectileSpeed = 60;
  • Event Player.ExplosionRadius = 8;
  • Call Subroutine(ClearProjectileEffects);
  • }
  • }
  • rule("Pharah Firing primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Pharah);
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.ProjectileSpeed = 35;
  • Event Player.ProjectileSize = 0.200;
  • Event Player.ExplosionRadius = 2.500;
  • }
  • }
  • disabled rule("--- Shooting")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Effects")
  • rule("Create Effects")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • "Projectile effect"
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[0],
  • Event Player.CurrentCheckPosition[0] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[1],
  • Event Player.CurrentCheckPosition[1] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[2],
  • Event Player.CurrentCheckPosition[2] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[3],
  • Event Player.CurrentCheckPosition[3] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[4],
  • Event Player.CurrentCheckPosition[4] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[5],
  • Event Player.CurrentCheckPosition[5] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[6],
  • Event Player.CurrentCheckPosition[6] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[7],
  • Event Player.CurrentCheckPosition[7] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[8],
  • Event Player.CurrentCheckPosition[8] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sphere, Sky Blue, Event Player.CurrentCheckPosition[9],
  • Event Player.CurrentCheckPosition[9] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025),
  • Visible To Position and Radius);
  • "Create number of effects for the projectile effects to the number set in Workshop Settings."
  • For Player Variable(Event Player, EffectCreationLoop, 0, Global.MaxEffectsPerPlayer, 1);
  • "Projectile effect"
  • Create Effect(All Players(All Teams), Sphere, Global.EffectColor, Event Player.CurrentCheckPosition[Evaluate Once(
  • Event Player.EffectCreationLoop)], Event Player.CurrentCheckPosition[Evaluate Once(Event Player.EffectCreationLoop)
  • ] == 0 ? Vector(0, -1000, 0) : Max(Event Player.ProjectileSize, 0.025), Visible To Position and Radius);
  • End;
  • "Explosion Radius Effect"
  • Create Effect(Filtered Array(All Players(All Teams), Event Player.ProjectileIsMoving == False && Event Player.ExplosionRadius > 0),
  • Sphere, Red, Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop], Event Player.ExplosionRadius,
  • Sphere, Color(Red), Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop], Event Player.ExplosionRadius,
  • Visible To Position and Radius);
  • }
  • }
  • rule("Using Primary Fire on most heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) != Hero(Mei);
  • Hero Of(Event Player) != Hero(Hanzo);
  • Hero Of(Event Player) != Hero(Reinhardt);
  • Hero Of(Event Player) != Hero(Zarya);
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • "Cancel primary action in case of multi shot abilities (lucio, genji, baptiste primary fire for example)"
  • Cancel Primary Action(Event Player);
  • Start Rule(FiringWeapon, Do Nothing);
  • }
  • }
  • rule("Using Secondary fire with some heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Array Contains(Array(Hero(Mei), Hero(Zarya), Hero(Soldier: 76)), Hero Of(Event Player)) == True;
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Start Rule(FiringWeapon, Do Nothing);
  • }
  • }
  • rule("Firing with Hanzo")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Hanzo);
  • Is Button Held(Event Player, Primary Fire) != True;
  • Is Button Held(Event Player, Button(Primary Fire)) != True;
  • }
  • actions
  • {
  • Start Rule(FiringWeapon, Do Nothing);
  • }
  • }
  • rule("Ability 2 with some heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Array Contains(Array(Hero(Reinhardt), Hero(Pharah)), Hero Of(Event Player)) == True;
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • Start Rule(FiringWeapon, Do Nothing);
  • }
  • }
  • rule("Ultimate as Bastion")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Bastion);
  • Is In Alternate Form(Event Player) == True;
  • Is Button Held(Event Player, Primary Fire) == True;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • }
  • actions
  • {
  • Start Rule(FiringWeapon, Do Nothing);
  • }
  • }
  • rule("Subroutine [Firing weapon]")
  • {
  • event
  • {
  • Subroutine;
  • FiringWeapon;
  • }
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, False);
  • "Loop used to show multiple projectile effects at the same time"
  • Event Player.CurrentEffectLoop = Event Player.CurrentEffectLoop >= Workshop Setting Integer(Custom String("Config"), Custom String(
  • "Max projectile effects per player "), 10, 1, 10) - 1 ? 0 : Event Player.CurrentEffectLoop + 1;
  • Event Player.CurrentEffectLoop = Event Player.CurrentEffectLoop >= Global.MaxEffectsPerPlayer - 1 ? 0 : Event Player.CurrentEffectLoop + 1;
  • "Set facing direction where player fired"
  • Event Player.FacingDirection[Event Player.CurrentEffectLoop] = Facing Direction Of(Event Player);
  • "Wait with firing projectile effect and recalculate facing direction if projectile is fired with a delay (Mei secondary fire / Rein Firestrike)"
  • If(Event Player.ProjectileDelay > 0);
  • Wait(Event Player.ProjectileDelay, Ignore Condition);
  • "Re-set facing direction where player fired"
  • Event Player.FacingDirection[Event Player.CurrentEffectLoop] = Facing Direction Of(Event Player);
  • End;
  • "Set eye position where player fired "
  • Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop] = Eye Position(Event Player);
  • "Ray cast from where the player fired to as far away as possible"
  • Event Player.RaycastPrimaryFire[Event Player.CurrentEffectLoop] = Ray Cast Hit Position(
  • Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop],
  • Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop] + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * 200,
  • All Players(Opposite Team Of(Team Of(Event Player))), Event Player, True);
  • "Get distance from eye position to end to ray cast"
  • Event Player.RaycastDistance[Event Player.CurrentEffectLoop] = Distance Between(
  • Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop],
  • Event Player.RaycastPrimaryFire[Event Player.CurrentEffectLoop]);
  • "If Projectile has radius, send several raycasts to check if any players would get hit. If true, stop the effect"
  • Call Subroutine(ProjectileRadiusCheck);
  • If(Event Player.IsProjectileHero);
  • Event Player.ProjectileIsMoving = True;
  • "Track the projectile effect through the air"
  • Call Subroutine(TrackProjectileEffect);
  • Event Player.ProjectileIsMoving = False;
  • End;
  • "Set the final position of the effect to the nearest ray cast used to determine if the projectile hit a player or object"
  • Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop] = Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop] + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * Event Player.RaycastDistance[Event Player.CurrentEffectLoop];
  • Set Primary Fire Enabled(Event Player, True);
  • }
  • }
  • rule("Subroutine [TrackProjectileEffect]")
  • {
  • event
  • {
  • Subroutine;
  • TrackProjectileEffect;
  • }
  • actions
  • {
  • Event Player.ShootLoop[Event Player.CurrentEffectLoop] = 0;
  • "Loop from player position to wall"
  • While(Event Player.RaycastDistance[Event Player.CurrentEffectLoop] > Event Player.ShootLoop[Event Player.CurrentEffectLoop]);
  • "Set current position in loop"
  • Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop] = Ray Cast Hit Position(
  • Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop],
  • Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop] + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * Event Player.ShootLoop[Event Player.CurrentEffectLoop],
  • Null, Null, True);
  • Wait(0.016, Ignore Condition);
  • "Set the effect to the position it traveled in 1 frame (62.5 frames per second)"
  • Event Player.ShootLoop[Event Player.CurrentEffectLoop] = Event Player.ShootLoop[Event Player.CurrentEffectLoop] + Event Player.ProjectileSpeed / 62.500;
  • End;
  • }
  • }
  • rule("Subroutine [ProjectileRadiusCheck] - Check if radius of projectile would hit player")
  • {
  • event
  • {
  • Subroutine;
  • ProjectileRadiusCheck;
  • }
  • actions
  • {
  • "If ShowBeamEffects is true destroy all previously created beam effects by this subroutine"
  • If(Event Player.ShowBeamEffects == True);
  • Call Subroutine(ClearBeamEffects);
  • End;
  • If(Event Player.ProjectileSize > 0);
  • "DO NOT OPEN ME, THE GAME WILL CRASH"
  • Event Player.ProjectileRadiusArray = Array(Vector(0, 0, 0) + Forward * Event Player.ProjectileSize,
  • Left * Event Player.ProjectileSize, Right * Event Player.ProjectileSize, Up * Event Player.ProjectileSize,
  • Down * Event Player.ProjectileSize, Left * Event Player.ProjectileSize * 0.702 + Up * Event Player.ProjectileSize * 0.702,
  • Left * Event Player.ProjectileSize * 0.702 + Down * Event Player.ProjectileSize * 0.702,
  • Right * Event Player.ProjectileSize * 0.702 + Up * Event Player.ProjectileSize * 0.702,
  • Right * Event Player.ProjectileSize * 0.702 + Down * Event Player.ProjectileSize * 0.702,
  • Left * Event Player.ProjectileSize * 0.924 + Up * Event Player.ProjectileSize * 0.386,
  • Left * Event Player.ProjectileSize * 0.924 + Down * Event Player.ProjectileSize * 0.386,
  • Right * Event Player.ProjectileSize * 0.924 + Up * Event Player.ProjectileSize * 0.386,
  • Right * Event Player.ProjectileSize * 0.924 + Down * Event Player.ProjectileSize * 0.386,
  • Left * Event Player.ProjectileSize * 0.386 + Up * Event Player.ProjectileSize * 0.924,
  • Left * Event Player.ProjectileSize * 0.386 + Down * Event Player.ProjectileSize * 0.924,
  • Right * Event Player.ProjectileSize * 0.386 + Up * Event Player.ProjectileSize * 0.924,
  • Right * Event Player.ProjectileSize * 0.386 + Down * Event Player.ProjectileSize * 0.924,
  • Left * Event Player.ProjectileSize * 0.500 + Forward * Event Player.ProjectileSize * 0.702,
  • Right * Event Player.ProjectileSize * 0.500 + Forward * Event Player.ProjectileSize * 0.702,
  • Up * Event Player.ProjectileSize * 0.500 + Forward * Event Player.ProjectileSize * 0.702,
  • Down * Event Player.ProjectileSize * 0.500 + Forward * Event Player.ProjectileSize * 0.702,
  • Left * Event Player.ProjectileSize * 0.500 * 0.702 + Up * Event Player.ProjectileSize * 0.500 * 0.702 + Forward * Event Player.ProjectileSize * 0.702,
  • Left * Event Player.ProjectileSize * 0.500 * 0.702 + Down * Event Player.ProjectileSize * 0.500 * 0.702 + Forward * Event Player.ProjectileSize * 0.702,
  • Right * Event Player.ProjectileSize * 0.500 * 0.702 + Up * Event Player.ProjectileSize * 0.500 * 0.702 + Forward * Event Player.ProjectileSize * 0.702,
  • Right * Event Player.ProjectileSize * 0.500 * 0.702 + Down * Event Player.ProjectileSize * 0.500 * 0.702 + Forward * Event Player.ProjectileSize * 0.702,
  • Left * Event Player.ProjectileSize * 0.500 * 0.924 + Up * Event Player.ProjectileSize * 0.500 * 0.386 + Forward * Event Player.ProjectileSize * 0.702,
  • Left * Event Player.ProjectileSize * 0.500 * 0.924 + Down * Event Player.ProjectileSize * 0.500 * 0.386 + Forward * Event Player.ProjectileSize * 0.702,
  • Right * Event Player.ProjectileSize * 0.500 * 0.924 + Up * Event Player.ProjectileSize * 0.500 * 0.386 + Forward * Event Player.ProjectileSize * 0.702,
  • Right * Event Player.ProjectileSize * 0.500 * 0.924 + Down * Event Player.ProjectileSize * 0.500 * 0.386 + Forward * Event Player.ProjectileSize * 0.702,
  • Left * Event Player.ProjectileSize * 0.500 * 0.386 + Up * Event Player.ProjectileSize * 0.500 * 0.924 + Forward * Event Player.ProjectileSize * 0.702,
  • Left * Event Player.ProjectileSize * 0.500 * 0.386 + Down * Event Player.ProjectileSize * 0.500 * 0.924 + Forward * Event Player.ProjectileSize * 0.702,
  • Right * Event Player.ProjectileSize * 0.500 * 0.386 + Up * Event Player.ProjectileSize * 0.500 * 0.924 + Forward * Event Player.ProjectileSize * 0.702,
  • Right * Event Player.ProjectileSize * 0.500 * 0.386 + Down * Event Player.ProjectileSize * 0.500 * 0.924 + Forward * Event Player.ProjectileSize * 0.702,
  • Left * Event Player.ProjectileSize * 0.750 + Forward * Event Player.ProjectileSize * 0.386,
  • Right * Event Player.ProjectileSize * 0.750 + Forward * Event Player.ProjectileSize * 0.386,
  • Up * Event Player.ProjectileSize * 0.750 + Forward * Event Player.ProjectileSize * 0.386,
  • Down * Event Player.ProjectileSize * 0.750 + Forward * Event Player.ProjectileSize * 0.386,
  • Left * Event Player.ProjectileSize * 0.750 * 0.702 + Up * Event Player.ProjectileSize * 0.750 * 0.702 + Forward * Event Player.ProjectileSize * 0.386,
  • Left * Event Player.ProjectileSize * 0.750 * 0.702 + Down * Event Player.ProjectileSize * 0.750 * 0.702 + Forward * Event Player.ProjectileSize * 0.386,
  • Right * Event Player.ProjectileSize * 0.750 * 0.702 + Up * Event Player.ProjectileSize * 0.750 * 0.702 + Forward * Event Player.ProjectileSize * 0.386,
  • Right * Event Player.ProjectileSize * 0.750 * 0.702 + Down * Event Player.ProjectileSize * 0.750 * 0.702 + Forward * Event Player.ProjectileSize * 0.386,
  • Left * Event Player.ProjectileSize * 0.750 * 0.924 + Up * Event Player.ProjectileSize * 0.750 * 0.386 + Forward * Event Player.ProjectileSize * 0.386,
  • Left * Event Player.ProjectileSize * 0.750 * 0.924 + Down * Event Player.ProjectileSize * 0.750 * 0.386 + Forward * Event Player.ProjectileSize * 0.386,
  • Right * Event Player.ProjectileSize * 0.750 * 0.924 + Up * Event Player.ProjectileSize * 0.750 * 0.386 + Forward * Event Player.ProjectileSize * 0.386,
  • Right * Event Player.ProjectileSize * 0.750 * 0.924 + Down * Event Player.ProjectileSize * 0.750 * 0.386 + Forward * Event Player.ProjectileSize * 0.386,
  • Left * Event Player.ProjectileSize * 0.750 * 0.386 + Up * Event Player.ProjectileSize * 0.750 * 0.924 + Forward * Event Player.ProjectileSize * 0.386,
  • Left * Event Player.ProjectileSize * 0.750 * 0.386 + Down * Event Player.ProjectileSize * 0.750 * 0.924 + Forward * Event Player.ProjectileSize * 0.386,
  • Right * Event Player.ProjectileSize * 0.750 * 0.386 + Up * Event Player.ProjectileSize * 0.750 * 0.924 + Forward * Event Player.ProjectileSize * 0.386,
  • Right * Event Player.ProjectileSize * 0.750 * 0.386 + Down * Event Player.ProjectileSize * 0.750 * 0.924 + Forward * Event Player.ProjectileSize * 0.386,
  • Left * Event Player.ProjectileSize * 0.250 + Forward * Event Player.ProjectileSize * 0.924,
  • Right * Event Player.ProjectileSize * 0.250 + Forward * Event Player.ProjectileSize * 0.924,
  • Up * Event Player.ProjectileSize * 0.250 + Forward * Event Player.ProjectileSize * 0.924,
  • Down * Event Player.ProjectileSize * 0.250 + Forward * Event Player.ProjectileSize * 0.924,
  • Left * Event Player.ProjectileSize * 0.250 * 0.702 + Up * Event Player.ProjectileSize * 0.250 * 0.702 + Forward * Event Player.ProjectileSize * 0.924,
  • Left * Event Player.ProjectileSize * 0.250 * 0.702 + Down * Event Player.ProjectileSize * 0.250 * 0.702 + Forward * Event Player.ProjectileSize * 0.924,
  • Right * Event Player.ProjectileSize * 0.250 * 0.702 + Up * Event Player.ProjectileSize * 0.250 * 0.702 + Forward * Event Player.ProjectileSize * 0.924,
  • Right * Event Player.ProjectileSize * 0.250 * 0.702 + Down * Event Player.ProjectileSize * 0.250 * 0.702 + Forward * Event Player.ProjectileSize * 0.924,
  • Left * Event Player.ProjectileSize * 0.250 * 0.924 + Up * Event Player.ProjectileSize * 0.250 * 0.386 + Forward * Event Player.ProjectileSize * 0.924,
  • Left * Event Player.ProjectileSize * 0.250 * 0.924 + Down * Event Player.ProjectileSize * 0.250 * 0.386 + Forward * Event Player.ProjectileSize * 0.924,
  • Right * Event Player.ProjectileSize * 0.250 * 0.924 + Up * Event Player.ProjectileSize * 0.250 * 0.386 + Forward * Event Player.ProjectileSize * 0.924,
  • Right * Event Player.ProjectileSize * 0.250 * 0.924 + Down * Event Player.ProjectileSize * 0.250 * 0.386 + Forward * Event Player.ProjectileSize * 0.924,
  • Left * Event Player.ProjectileSize * 0.250 * 0.386 + Up * Event Player.ProjectileSize * 0.250 * 0.924 + Forward * Event Player.ProjectileSize * 0.924,
  • Left * Event Player.ProjectileSize * 0.250 * 0.386 + Down * Event Player.ProjectileSize * 0.250 * 0.924 + Forward * Event Player.ProjectileSize * 0.924,
  • Right * Event Player.ProjectileSize * 0.250 * 0.386 + Up * Event Player.ProjectileSize * 0.250 * 0.924 + Forward * Event Player.ProjectileSize * 0.924,
  • Right * Event Player.ProjectileSize * 0.250 * 0.386 + Down * Event Player.ProjectileSize * 0.250 * 0.924 + Forward * Event Player.ProjectileSize * 0.924);
  • Else;
  • Event Player.ProjectileRadiusArray = Array(Vector(0, 0, 0));
  • End;
  • "Loop through a series of circle positions to see if projectile hits on any of it's sides"
  • For Player Variable(Event Player, ProjectileRadiusArrayLoop, 0, Count Of(Event Player.ProjectileRadiusArray), 1);
  • "The the position relative to the player"
  • Event Player.ProjectileRadiusPlayerHit = Vector(0, Y Component Of(
  • Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop]), 0) + World Vector Of(
  • Event Player.ProjectileRadiusArray[Event Player.ProjectileRadiusArrayLoop], Event Player, Rotation And Translation);
  • "Show a ton of beams to indicate the path of the projectile"
  • If(Event Player.ShowBeamEffects == True);
  • Create Beam Effect(All Players(All Teams), Grapple Beam, Event Player.ProjectileRadiusPlayerHit,
  • Event Player.ProjectileRadiusPlayerHit + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * 100, White, None);
  • Event Player.ProjectileRadiusPlayerHit + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * 100, Color(White),
  • None);
  • Event Player.ProjectilePathEffects = Append To Array(Event Player.ProjectilePathEffects, Last Created Entity);
  • End;
  • "Get distance using ray cast to see if it hits a player, or any other world object"
  • Event Player.ProjectileRadiusArray[Event Player.ProjectileRadiusArrayLoop] = Distance Between(
  • Event Player.ProjectileRadiusPlayerHit, Ray Cast Hit Position(Event Player.ProjectileRadiusPlayerHit,
  • Event Player.ProjectileRadiusPlayerHit + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * 100, All Players(
  • Opposite Team Of(Team Of(Event Player))), Event Player, True));
  • End;
  • "Sort array from lowest to higher distance"
  • Event Player.ProjectileRadiusArray = Sorted Array(Event Player.ProjectileRadiusArray, Current Array Element);
  • "Grab the first item from the array, it being the closest to the event player"
  • Event Player.RaycastDistance[Event Player.CurrentEffectLoop] = First Of(Event Player.ProjectileRadiusArray);
  • }
  • }
  • rule("Subroutine [ClearProjectileEffects] - Reset all projectile effects made by the event player")
  • {
  • event
  • {
  • Subroutine;
  • ClearProjectileEffects;
  • }
  • actions
  • {
  • Event Player.CurrentCheckPosition = Empty Array;
  • Event Player.ShootLoop = Empty Array;
  • Event Player.CurrentEffectLoop = 0;
  • Call Subroutine(ClearBeamEffects);
  • }
  • }
  • rule("Subroutine [ClearBeamEffects] - Reset all beam effects associated with projectile paths")
  • {
  • event
  • {
  • Subroutine;
  • ClearBeamEffects;
  • }
  • actions
  • {
  • While(Count Of(Event Player.ProjectilePathEffects));
  • Destroy Effect(Last Of(Event Player.ProjectilePathEffects));
  • Event Player.ProjectilePathEffects = Remove From Array(Event Player.ProjectilePathEffects, Last Of(
  • Event Player.ProjectilePathEffects));
  • End;
  • Event Player.ProjectilePathEffects = Empty Array;
  • }
  • }
  • disabled rule("--- Other stuff")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("Firing while in the air")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is In Air(Event Player) == True;
  • (Is Firing Primary(Event Player) || Is Firing Secondary(Event Player)) == True;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Firing while in the air messes with the results."));
  • }
  • }
  • rule("Clear current effects")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Ability 1) == True;
  • Is Button Held(Event Player, Interact) == True;
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • }
  • actions
  • {
  • Call Subroutine(ClearProjectileEffects);
  • Small Message(Event Player, Custom String("Cleared all projectile effects"));
  • }
  • }
  • rule("Disable damage dealt")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Crouch) == True;
  • Is Button Held(Event Player, Ultimate) == True;
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Is Button Held(Event Player, Button(Ultimate)) == True;
  • }
  • actions
  • {
  • If(Event Player.NoDamageDealt == True);
  • Event Player.NoDamageDealt = False;
  • Set Damage Dealt(Event Player, 100);
  • Small Message(Event Player, Custom String("Enabling damage dealt"));
  • Else;
  • Event Player.NoDamageDealt = True;
  • Set Damage Dealt(Event Player, 1);
  • Small Message(Event Player, Custom String("Disabling damage dealt"));
  • End;
  • }
  • }
  • rule("Toggle projectile path")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Ability 1) == True;
  • Is Button Held(Event Player, Ability 2) == True;
  • Is Button Held(Event Player, Button(Ability 1)) == True;
  • Is Button Held(Event Player, Button(Ability 2)) == True;
  • }
  • actions
  • {
  • If(Event Player.ShowBeamEffects == True);
  • Event Player.ShowBeamEffects = False;
  • Small Message(Event Player, Custom String("No longer showing beam effects for latest projectile"));
  • Else;
  • Event Player.ShowBeamEffects = True;
  • Small Message(Event Player, Custom String("Showing beam effects for latest projectile"));
  • End;
  • }
  • }
Join the Workshop.codes Discord