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. https://workshop.codes/EZRCJ"
  • Mode Name: "Projectile Visualisation"
  • }
  • 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 0
  • }
  • }
  • 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 Cooldown Time: 10%
  • No Ammunition Requirement: On
  • Sleep Dart Cooldown Time: 10%
  • 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
  • {
  • A-36 Tactical Grenade: Off
  • Reconfigure: Off
  • Ultimate Ability Configuration: Artillery: Off
  • }
  • Cassidy
  • {
  • Combat Roll: Off
  • Magnetic Grenade: Off
  • No Ammunition Requirement: On
  • Secondary Fire: Off
  • Ultimate Generation - Combat Deadeye: 0%
  • Ultimate Generation - Passive Deadeye: 0%
  • Ultimate Generation Deadeye: 10%
  • }
  • D.Va
  • {
  • Spawn Without Mech: On
  • }
  • Echo
  • {
  • Focusing Beam: Off
  • No Ammunition Requirement: On
  • Primary Fire: Off
  • Quick Melee: Off
  • Sticky Bombs Cooldown Time: 10%
  • 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%
  • }
  • Junker Queen
  • {
  • Carnage: Off
  • Commanding Shout: Off
  • Jagged Blade Cooldown Time: 10%
  • Primary Fire: Off
  • Quick Melee: Off
  • Ultimate Ability Rampage: Off
  • }
  • Junkrat
  • {
  • Concussion Mine: Off
  • Frag Launcher Knockback Scalar: 0%
  • Steel Trap: Off
  • }
  • Kiriko
  • {
  • Primary Fire: Off
  • Protection Suzu: Off
  • Quick Melee: Off
  • Spawn With Ultimate Ready: On
  • Swift Step: Off
  • Ultimate Ability Kitsune Rush: Off
  • }
  • Lúcio
  • {
  • Soundwave Knockback Scalar: 0%
  • }
  • Mei
  • {
  • Cryo-Freeze: Off
  • Ice Wall: Off
  • No Ammunition Requirement: On
  • 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
  • {
  • Energy Javelin Cooldown Time: 10%
  • Fortify: Off
  • Javelin Spin: Off
  • No Ammunition Requirement: On
  • Ultimate Generation - Combat Terra Surge: 0%
  • Ultimate Generation - Passive Terra Surge: 0%
  • Ultimate Generation Terra Surge: 10%
  • }
  • Pharah
  • {
  • Concussive Blast Cooldown Time: 10%
  • Rocket Launcher Knockback Scalar: 0%
  • }
  • Reinhardt
  • {
  • Fire Strike Cooldown Time: 10%
  • Rocket Hammer Knockback Scalar: 0%
  • }
  • Sigma
  • {
  • Accretion: Off
  • Experimental Barrier: Off
  • Kinetic Grasp: Off
  • Ultimate Ability Gravitic Flux: Off
  • }
  • Sojourn
  • {
  • Disruptor Shot: Off
  • Power Slide: Off
  • Quick Melee: Off
  • Railgun Alt Fire Energy Charge Rate: 500%
  • Ultimate Ability Overclock: Off
  • }
  • 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
  • Moira
  • Reaper
  • Roadhog
  • Sombra
  • Symmetra
  • Tracer
  • Winston
  • }
  • }
  • }
  • extensions
  • {
  • Play More Effects
  • }
  • }
  • variables
  • {
  • global:
  • 0: HUDIsVisible
  • 1: MaxEffectsPerPlayer
  • 2: BotSpawnPositions
  • 3: ProjectileHeroes
  • 4: BotArray
  • 5: SlowmotionActive
  • player:
  • 0: ExplosionRadius
  • 1: ProjectileDelay
  • 2: ProjectileSpeed
  • 3: ProjectileSizePre
  • 4: ProjectileSize
  • 5: ProjectileIsMoving
  • 6: IsProjectileHero
  • 7: ProjectileTimeBetweenShots
  • 8: ProjectileMaxRange
  • 9: EffectsArray
  • 10: EffectsPreArray
  • 11: CurrentCheckPosition
  • 12: CurrentEffectLoop
  • 13: FacingDirection
  • 14: EyePositionWhenFired
  • 15: RaycastPrimaryFire
  • 16: RaycastDistance
  • 17: ShootLoop
  • 18: ShowBeamEffects
  • 19: ProjectileRadiusArray
  • 20: ProjectileRadiusPlayerHit
  • 21: ProjectileRadiusArrayLoop
  • 22: ProjectilePathEffects
  • 23: NoDamageDealt
  • }
  • subroutines
  • {
  • 0: CreateDummyBots
  • 1: FiringWeapon
  • 2: TrackProjectileEffect
  • 3: CancelPrimary
  • 4: ProjectileRadiusCheck
  • 5: ClearProjectileEffects
  • 6: ClearBeamEffects
  • 7: CreateEffect
  • }
  • rule("Current hero info HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Create HUD Text(All Players(All Teams), Hero Icon String(Hero Of(Local Player)), Custom String(
  • "Explosion radius: {0}m | Projectile delay: {1}s | Projectile speed: {1}m/s", Local Player.ExplosionRadius,
  • Local Player.ProjectileDelay, Local Player.ProjectileSpeed), Custom String("Projectile radius: S8: {0}m / S9: {1}m",
  • Local Player.ProjectileSizePre, Local Player.ProjectileSize), Left, -2, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Blue shows the Season 9 radius"), Null, Left, 5, Color(White), Color(
  • Blue), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Null, Custom String("Orange shows the Season 8 radius"), Null, Left, 6, Color(White),
  • Color(Orange), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("Controls HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Controls to toggle projectile path"
  • Create HUD Text(All Players(All Teams), Null, Custom String("{0} Controls with [Ultimate] + [Interact]\n",
  • Global.HUDIsVisible ? Custom String("Hide") : Custom String("Show")), Null, Right, -1, Color(White), Color(Turquoise), Color(
  • White), Visible To and String, Default Visibility);
  • "Controls to remove all effects"
  • Create HUD Text(Filtered Array(All Players(All Teams), Global.HUDIsVisible), Null, Custom String(
  • "Remove all your effects with [Ability 1] + [Interact]"), Null, Right, 2, Color(White), Color(Sky Blue), Color(White),
  • Visible To and String, Default Visibility);
  • "Controls to change hero"
  • Create HUD Text(Filtered Array(All Players(All Teams), Global.HUDIsVisible), Null, Custom String(
  • "Change hero with [Crouch] + [Reload] + [Jump]"), Null, Right, 3, Color(White), Color(Sky Blue), Color(White),
  • Visible To and String, Default Visibility);
  • "Controls to spawn dummy bot"
  • Create HUD Text(Filtered Array(All Players(All Teams), Global.HUDIsVisible), Null, Custom String(
  • "Spawn a random dummy bot with [Crouch] + [Interact]"), Null, 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(Filtered Array(All Players(All Teams), Global.HUDIsVisible), Null, Custom String(
  • "Toggle damage dealt with [Crouch] + [Ultimate]"), Null, Right, 5, Color(White), Color(Sky Blue), Color(White),
  • Visible To and String, Default Visibility);
  • "Controls to toggle projectile path"
  • Create HUD Text(Filtered Array(All Players(All Teams), Global.HUDIsVisible), Null, Custom String(
  • "Toggle path of latest projectile with [Ability 1] + [Ability 2]"), Null, Right, 6, Color(White), Color(Sky Blue), Color(
  • White), Visible To and String, Default Visibility);
  • "Controls to toggle slow motion"
  • Create HUD Text(Filtered Array(All Players(All Teams), Global.HUDIsVisible), Null, Custom String(
  • "Toggle slow motion [Reload] + [Interact]"), Null, Right, 7, Color(White), Color(Sky Blue), Color(White),
  • Visible To and String, Default Visibility);
  • }
  • }
  • rule("Per hero info HUD")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Create HUD Text(All Players(All Teams), Null, Custom String(" "), Null, Left, 0, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Lúcio)), Null, Custom String(
  • "Only one projectile is fired."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), Color(White),
  • Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Genji)), Null, Custom String(
  • "Only one projectile is fired.\nSecondary fire is disabled but projectile width is the same."), Null, Left, 2, Color(White),
  • Custom Color(250, 190, 190, 255), Color(White), Visible To and String, Default Visibility);
  • 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, 2, Color(White), Custom Color(250, 190, 190, 255), Color(White),
  • Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Junkrat)), Null, Custom String(
  • "Gravity is disabled.\nBounces are not accounted for."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), Color(
  • White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Hanzo)), Null, Custom String(
  • "Gravity is disabled.\nAll projectiles have the same width."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255),
  • Color(White), Visible To and String, Default Visibility);
  • 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."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), Color(White),
  • Visible To and String, Default Visibility);
  • 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.\nConcussive blast and Primary fire have vastly different values."),
  • Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Echo)), Null, Custom String(
  • "Only Sticky Bombs is represented.\nOnly 1 Sticky Bomb is fired at a time."), Null, Left, 2, Color(White), Custom Color(250,
  • 190, 190, 255), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Torbjörn)), Null, Custom String(
  • "Primary fire is inaccurate. Gravity is disabled."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), Color(
  • White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Sigma)), Null, Custom String(
  • "Primary fire does not account for bounces.\nOnly one orb is fired at a time."), Null, Left, 2, Color(White), Custom Color(250,
  • 190, 190, 255), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Ana)), Null, Custom String(
  • "Scoped shots are buggy. Grenade has no gravity."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), Color(
  • White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Sojourn)), Null, Custom String(
  • "Secondary Fire ranges from 0.02m to 0.1m. Visuals assume full charge.\nSecondary fire position might be off due to recoil."),
  • Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Illari)), Null, Custom String(
  • "Primary fire is delayed until the charging starts, how your aim still for a second when firing."), Null, Left, 2, Color(
  • White), Custom Color(250, 190, 190, 255), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Cassidy)), Null, Custom String(
  • "Primary fire position might be off due to recoil."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), Color(
  • White), Visible To and String, Default Visibility);
  • Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Ashe)), Null, Custom String(
  • "Primary fire position might be off due to recoil."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), Color(
  • White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("Initialise settings")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • 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));
  • "Set Controls HUD to be visible by default"
  • Global.HUDIsVisible = True;
  • }
  • }
  • rule("Initialise player")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.ProjectileIsMoving = False;
  • Set Projectile Gravity(Event Player, 0);
  • }
  • }
  • 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), Hero(Sigma), Hero(
  • Junker Queen), Hero(Illari), Hero(Lifeweaver), Hero(Kiriko));
  • Junker Queen), Hero(Illari), Hero(Lifeweaver), Hero(Sojourn), Hero(Kiriko));
  • }
  • }
  • 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;
  • If(Hero Of(Event Player) == Hero(Echo));
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.250;
  • Event Player.ProjectileSizePre = 0.150;
  • Event Player.ExplosionRadius = 2;
  • Event Player.ProjectileTimeBetweenShots = 2.100;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Mei));
  • Event Player.ProjectileSpeed = 115;
  • Event Player.ProjectileDelay = 0.400;
  • Event Player.ProjectileSize = 0.250;
  • Event Player.ProjectileSizePre = 0.150;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0.400;
  • End;
  • If(Hero Of(Event Player) == Hero(Ana));
  • Event Player.ProjectileSpeed = 125;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.080;
  • Event Player.ProjectileSizePre = 0;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Genji));
  • Event Player.ProjectileSpeed = 60;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.200;
  • Event Player.ProjectileSizePre = 0.100;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Orisa));
  • Event Player.ProjectileSpeed = 90;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.150;
  • Event Player.ProjectileSizePre = 0.100;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Mercy));
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.400;
  • Event Player.ProjectileSizePre = 0.250;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 1 / 5;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Zenyatta));
  • Event Player.ProjectileSpeed = 90;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.250;
  • Event Player.ProjectileSizePre = 0.150;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Pharah));
  • Event Player.ProjectileSpeed = 35;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.350;
  • Event Player.ProjectileSizePre = 0.200;
  • Event Player.ExplosionRadius = 2.500;
  • Event Player.ProjectileTimeBetweenShots = 2.500;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Reinhardt));
  • Event Player.ProjectileSpeed = 25;
  • Event Player.ProjectileDelay = 0.400;
  • Event Player.ProjectileSize = 0.850;
  • Event Player.ProjectileSizePre = 0.850;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0.400;
  • End;
  • If(Hero Of(Event Player) == Hero(D.Va));
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.350;
  • Event Player.ProjectileSizePre = 0.250;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Junkrat));
  • Event Player.ProjectileSpeed = 25;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.400;
  • Event Player.ProjectileSizePre = 0.250;
  • Event Player.ExplosionRadius = 2;
  • Event Player.ProjectileTimeBetweenShots = 2;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Torbjörn));
  • Event Player.ProjectileSpeed = 70;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.200;
  • Event Player.ProjectileSizePre = 0.100;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Hanzo));
  • Event Player.ProjectileSpeed = 110;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.200;
  • Event Player.ProjectileSizePre = 0.100;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Zarya));
  • Event Player.ProjectileSpeed = 25;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.350;
  • Event Player.ProjectileSizePre = 0.200;
  • Event Player.ExplosionRadius = 2.500;
  • Event Player.ProjectileTimeBetweenShots = 2.500;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Lúcio));
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.300;
  • Event Player.ProjectileSizePre = 0.150;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Sigma));
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.350;
  • Event Player.ProjectileSizePre = 0.200;
  • Event Player.ExplosionRadius = 3;
  • Event Player.ProjectileTimeBetweenShots = 3;
  • Event Player.ProjectileMaxRange = 22;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Kiriko));
  • Event Player.ProjectileSpeed = 70;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.250;
  • Event Player.ProjectileSizePre = 0.180;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Junker Queen));
  • Event Player.ProjectileSpeed = 30;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.350;
  • Event Player.ProjectileSizePre = 0.200;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Illari));
  • Event Player.ProjectileSpeed = 150;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.130;
  • Event Player.ProjectileSizePre = 0.050;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Lifeweaver));
  • Event Player.ProjectileSpeed = 150;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.175;
  • Event Player.ProjectileSizePre = 0.125;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • If(Hero Of(Event Player) == Hero(Sojourn));
  • Event Player.ProjectileSpeed = 160;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.150;
  • Event Player.ProjectileSizePre = 0.100;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • }
  • }
  • rule("Is not projectile hero?")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) != True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.IsProjectileHero = False;
  • Event Player.ProjectileSizePre = 0;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSpeed = 0;
  • Event Player.ExplosionRadius = 0;
  • If(Hero Of(Event Player) == Hero(Mauga));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • If(Hero Of(Event Player) == Hero(Wrecking Ball));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • If(Hero Of(Event Player) == Hero(Ana));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • If(Hero Of(Event Player) == Hero(Ashe));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • If(Hero Of(Event Player) == Hero(Baptiste));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • If(Hero Of(Event Player) == Hero(Bastion));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • If(Hero Of(Event Player) == Hero(Cassidy));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • If(Hero Of(Event Player) == Hero(Soldier: 76));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • If(Hero Of(Event Player) == Hero(Widowmaker));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • }
  • }
  • rule("Spawn initial bots")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • Call Subroutine(CreateDummyBots);
  • "Create an effect on the position where player can shuffle bots"
  • Create Effect(All Players(All Teams), Ring, Color(Purple), Vector(12, 0, 12), 1.500, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("Crouch here to shuffle bots"), Vector(12, 1, 12), 1,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • }
  • }
  • rule("Re-shuffle dummy bots")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Distance Between(Vector(12, 0, 12), Position Of(Event Player)) < 2;
  • }
  • actions
  • {
  • Destroy All Dummy Bots;
  • Wait(1, Ignore Condition);
  • Call Subroutine(CreateDummyBots);
  • "Extra wait at the end to prevent spamming"
  • Wait(1, Ignore Condition);
  • }
  • }
  • rule("Subroutine [CreateDummyBots] - Create 3 dummy bots at specified location")
  • {
  • event
  • {
  • Subroutine;
  • CreateDummyBots;
  • }
  • actions
  • {
  • Create Dummy Bot(Random Value In Array(All Heroes), Team 2, 0, Global.BotSpawnPositions[0], Direction Towards(
  • Global.BotSpawnPositions[0], Vector(0, 1.500, 0)));
  • Global.BotArray[0] = Last Created Entity;
  • Create Dummy Bot(Random Value In Array(All Heroes), Team 2, 0, Global.BotSpawnPositions[1], Direction Towards(
  • Global.BotSpawnPositions[1], Vector(0, 1.500, 0)));
  • Global.BotArray[1] = Last Created Entity;
  • Create Dummy Bot(Random Value In Array(All Heroes), Team 2, 0, Global.BotSpawnPositions[2], Direction Towards(
  • Global.BotSpawnPositions[2], Vector(0, 1.500, 0)));
  • Global.BotArray[2] = Last Created Entity;
  • }
  • }
  • rule("Spawn bots at player with Crouch + Interact")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • 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);
  • Set Knockback Received(Event Player, 0);
  • }
  • }
  • rule("Resurrect Dummy Bot when they die")
  • {
  • event
  • {
  • Player Died;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • Resurrect(Event Player);
  • }
  • }
  • 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;
  • Event Player.ProjectileSize = 0.080;
  • Event Player.ProjectileSizePre = 0;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ExplosionRadius = 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;
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • "Projectile speed per second"
  • Event Player.ProjectileSpeed = 125;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.080;
  • Event Player.ProjectileSizePre = 0;
  • Event Player.ExplosionRadius = 0;
  • }
  • }
  • rule("Ana sleepdart")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Ana);
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • "Projectile speed per second"
  • Event Player.ProjectileSpeed = 60;
  • Event Player.ProjectileSizePre = 0.200;
  • Event Player.ProjectileSize = 0.200;
  • Event Player.ProjectileDelay = 0.300;
  • Event Player.ExplosionRadius = 0;
  • }
  • }
  • rule("Ana grenade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Ana);
  • Is Using Ability 2(Event Player) == True;
  • }
  • actions
  • {
  • "Projectile speed per second"
  • Event Player.ProjectileSpeed = 30;
  • Event Player.ProjectileSize = 0.350;
  • Event Player.ProjectileSizePre = 0.200;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ExplosionRadius = 4;
  • }
  • }
  • 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.400;
  • Event Player.ProjectileSizePre = 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.ProjectileSizePre = 0;
  • Event Player.ProjectileSize = 0.080;
  • 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;
  • If(Hero Of(Event Player) == Hero(Soldier: 76));
  • Event Player.ProjectileSpeed = 50;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.350;
  • Event Player.ProjectileSizePre = 0.200;
  • Event Player.ExplosionRadius = 4;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • 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;
  • If(Hero Of(Event Player) == Hero(Soldier: 76));
  • Event Player.ProjectileSize = 0.080;
  • End;
  • }
  • }
  • 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 = 6;
  • }
  • }
  • rule("Pharah Firing primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Pharah);
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • If(Hero Of(Event Player) == Hero(Pharah));
  • Event Player.ProjectileSpeed = 35;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.350;
  • Event Player.ProjectileSizePre = 0.200;
  • Event Player.ExplosionRadius = 2.500;
  • Event Player.ProjectileTimeBetweenShots = 2.500;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • }
  • }
  • rule("Orisa Javelin")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Orisa);
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.ProjectileSize = 0.500;
  • Event Player.ProjectileSizePre = 0.500;
  • Event Player.ProjectileSpeed = 70;
  • Call Subroutine(ClearProjectileEffects);
  • }
  • }
  • rule("Orisa Firing primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Orisa);
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.ProjectileSize = 0.150;
  • Event Player.ProjectileSizePre = 0.100;
  • Event Player.ProjectileSpeed = 90;
  • }
  • }
  • rule("Sojourn Firing primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Sojourn);
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.ProjectileSize = 0.100;
  • Event Player.ProjectileSizePre = 0.100;
  • Call Subroutine(ClearProjectileEffects);
  • }
  • }
  • rule("Sojourn Firing primary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Sojourn);
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • Event Player.ProjectileSize = 0.150;
  • Event Player.ProjectileSizePre = 0.100;
  • If(Hero Of(Event Player) == Hero(Sojourn));
  • Event Player.ProjectileSpeed = 160;
  • Event Player.ProjectileDelay = 0;
  • Event Player.ProjectileSize = 0.150;
  • Event Player.ProjectileSizePre = 0.100;
  • Event Player.ExplosionRadius = 0;
  • Event Player.ProjectileTimeBetweenShots = 0;
  • Event Player.ProjectileMaxRange = 0;
  • Event Player.ProjectileDelay = 0;
  • End;
  • }
  • }
  • rule("Junker Queen Secondary")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Junker Queen);
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • }
  • actions
  • {
  • Start Rule(FiringWeapon, Do Nothing);
  • }
  • }
  • rule("Create Effects")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) != True;
  • }
  • actions
  • {
  • Event Player.EffectsArray = Empty Array;
  • Event Player.EffectsPreArray = Empty Array;
  • "Projectile effect"
  • Create Effect(Filtered Array(All Players(All Teams), Event Player.ProjectileIsMoving == True), Sphere, Color(Blue),
  • Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop] == 0 ? Vector(0, -1000, 0)
  • : Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop], Event Player.ProjectileSize,
  • Visible To Position and Radius);
  • "Projectile effect"
  • Create Effect(Filtered Array(All Players(All Teams), Event Player.ProjectileIsMoving == True), Sphere, Color(Orange),
  • Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop] == 0 ? Vector(0, -1000, 0)
  • : Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop], Event Player.ProjectileSizePre,
  • Visible To Position and Radius);
  • "Explosion Radius Effect"
  • Create Effect(Filtered Array(All Players(All Teams),
  • Event Player.ProjectileIsMoving == False && Event Player.ExplosionRadius > 0 && Magnitude Of(
  • Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop]) > 0), 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);
  • Hero Of(Event Player) != Hero(Echo);
  • 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(Echo), Hero(Sojourn), Hero(Junker Queen), Hero(Kiriko), Hero(
  • Orisa), Hero(Winston)), Hero Of(Event Player)) == True;
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • "Cancel primary action for echo sticky bombs to send out only 1 bomb"
  • If(Hero Of(Event Player) == Hero(Echo));
  • Start Rule(CancelPrimary, Restart Rule);
  • End;
  • 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, Button(Primary Fire)) != True;
  • }
  • actions
  • {
  • Start Rule(FiringWeapon, Do Nothing);
  • }
  • }
  • rule("Ability 1 with some heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Array Contains(Array(Hero(Ana)), Hero Of(Event Player)) == True;
  • Is Using Ability 1(Event Player) == 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(Ana)), 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, 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);
  • Event Player.ProjectileIsMoving = False;
  • "Loop used to show multiple projectile effects at the same time"
  • 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 or to max projectile distance"
  • 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] * (
  • Event Player.ProjectileMaxRange > 0 ? Event Player.ProjectileMaxRange : 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 effect at projectile position"
  • Call Subroutine(CreateEffect);
  • "Re-enable primary fire"
  • 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 [CancelPrimary] - Cancel primary on a small delay")
  • {
  • event
  • {
  • Subroutine;
  • CancelPrimary;
  • }
  • actions
  • {
  • Wait(0.050, Ignore Condition);
  • Cancel Primary Action(Event Player);
  • }
  • }
  • 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(Eye Position(Event Player)) - Y Component Of(Position Of(
  • Event Player)), 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, 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] * (
  • Event Player.ProjectileMaxRange > 0 ? Event Player.ProjectileMaxRange : 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);
  • "Destroy effects at final position"
  • While(Count Of(Event Player.EffectsArray) > 0);
  • Destroy Effect(Last Of(Event Player.EffectsArray));
  • Destroy Effect(Last Of(Event Player.EffectsPreArray));
  • Event Player.EffectsArray = Remove From Array(Event Player.EffectsArray, Last Of(Event Player.EffectsArray));
  • Event Player.EffectsPreArray = Remove From Array(Event Player.EffectsPreArray, Last Of(Event Player.EffectsPreArray));
  • Wait(0.016, Ignore Condition);
  • End;
  • }
  • }
  • 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;
  • }
  • }
  • rule("Subroutine [CreateEffect] - Create effect at position")
  • {
  • event
  • {
  • Subroutine;
  • CreateEffect;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.EffectsArray[Event Player.CurrentEffectLoop]);
  • Destroy Effect(Event Player.EffectsPreArray[Event Player.CurrentEffectLoop]);
  • Event Player.EffectsArray[Event Player.CurrentEffectLoop] = 0;
  • Event Player.EffectsPreArray[Event Player.CurrentEffectLoop] = 0;
  • Create Effect(All Players(All Teams), Sphere, Color(Blue),
  • Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop] == 0 ? Vector(0, -1000, 0)
  • : Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop], Evaluate Once(Max(Event Player.ProjectileSize, 0.025)),
  • None);
  • Event Player.EffectsArray[Event Player.CurrentEffectLoop] = Last Created Entity;
  • Create Effect(All Players(All Teams), Sphere, Color(Orange),
  • Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop] == 0 ? Vector(0, -1000, 0)
  • : Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop], Evaluate Once(Max(Event Player.ProjectileSizePre, 0.025)),
  • None);
  • Event Player.EffectsPreArray[Event Player.CurrentEffectLoop] = Last Created Entity;
  • }
  • }
  • rule("In-world and effect")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Create an effect on the position where player can change hero"
  • Create Effect(All Players(All Teams), Ring, Color(Green), Vector(12, 0, -12), 1.500, Visible To Position and Radius);
  • Create In-World Text(All Players(All Teams), Custom String("Crouch here to change hero"), Vector(12, 1, -12), 1,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • }
  • }
  • rule("Swap hero by crouching")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • Distance Between(Vector(12, 0, -12), Position Of(Event Player)) < 2;
  • }
  • actions
  • {
  • 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("Swap hero with key combo")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • 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
  • {
  • 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("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, 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, 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, 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;
  • }
  • }
  • rule("Toggle slow motion")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Is Button Held(Event Player, Button(Reload)) == All Living Players(All Teams);
  • }
  • actions
  • {
  • If(Global.SlowmotionActive != True);
  • Global.SlowmotionActive = True;
  • Set Slow Motion(25);
  • Small Message(All Players(All Teams), Custom String("Slow motion enabled"));
  • Else;
  • Global.SlowmotionActive = False;
  • Set Slow Motion(100);
  • Small Message(All Players(All Teams), Custom String("Slow motion disabled"));
  • End;
  • }
  • }
  • rule("Toggle HUD")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Ultimate)) == True;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • }
  • actions
  • {
  • Global.HUDIsVisible = !Global.HUDIsVisible;
  • }
  • }
Join the Workshop.codes Discord