Return to post
- settings
- {
- main
- {
- Description: "A tool to visualise the size of many projectile and hitscan abilities. By Mitsiee. https://workshop.codes/EZRCJ"
- }
- 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
- {
- 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%
- }
- 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
- 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%
- }
- Sigma
- {
- Accretion: Off
- Experimental Barrier: Off
- Kinetic Grasp: Off
- Ultimate Ability Gravitic Flux: 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
- }
- }
- }
- }
- variables
- {
- global:
- 0: ProjectileHeroes
- 1: EffectColorIndex
- 2: EffectColorArray
- 3: EffectColor
- 4: MaxEffectsPerPlayer
- 5: BotSpawnPositions
- 6: BotArray
- 7: HUDIsVisible
- 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
- 22: ProjectileMaxRange
- }
- subroutines
- {
- 0: ProjectileRadiusCheck
- 1: TrackProjectileEffect
- 2: ClearProjectileEffects
- 3: ClearBeamEffects
- 4: FiringWeapon
- 5: CreateDummyBots
- 6: CancelPrimary
- }
- disabled rule("--- HUD")
- {
- event
- {
- Ongoing - Global;
- }
- }
- rule("Current hero info HUD")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- actions
- {
- "HUD that holds server stats"
- Create HUD Text(Event Player, Null, Custom String("Load: {0} | Average: {1} | Peak: {2}\n", Server Load, Server Load Average,
- Server Load Peak), Null, Left, -3, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
- "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, 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,
- Create HUD Text(Event Player, Hero Icon String(Hero Of(Event Player)), Custom String(
- "Projectile radius: {0}m | Projectile speed: {1}m/s", Event Player.ProjectileSize, Event Player.ProjectileSpeed),
- Custom String("Explosion radius: {0}m | Projectile delay: {1}s", Event Player.ExplosionRadius, Event Player.ProjectileDelay),
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, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
- Left, -2, Color(White), Color(White), 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 projectile path"
Create HUD Text(All Players(All Teams), Null, Custom String("{0} Controls with [Ultimate] + [Interact]",
Global.HUDIsVisible ? Custom String("Hide") : Custom String("Show")), Null, Right, 7, Color(White), Color(Turquoise), 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, 1, Color(White), Color(White), Color(White),
- Visible To and String, Default Visibility);
- "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, Color(White), Color(Red), Color(White), Visible To and String,
Default Visibility);
- "Only one projectile is fired."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), 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, Color(
White), Color(Red), Color(White), Visible To and String, Default Visibility);
- "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);
- "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, Color(White), Color(Red), Color(White), Visible To and String,
Default Visibility);
- "Only Firestrike is simulated."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), 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, Color(White), Color(Red), Color(White),
Visible To and String, Default Visibility);
- "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);
- "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, Color(White), Color(Red), Color(White),
Visible To and String, Default Visibility);
- "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);
- "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, Color(White), Color(Red), Color(White),
- "Fire rate is slowed down."), Null, Left, 2, Color(White), Custom Color(250, 190, 190, 255), 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, Color(White), Color(Red), Color(White), Visible To and String, Default Visibility);
- "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);
- "Echo"
- Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Echo)), Null, Custom String(
"Only Sticky Bombs is represented. Only 1 Sticky Bomb is fired at a time."), Null, Left, 0, Color(White), Color(Red), Color(
White), Visible To and String, Default Visibility);
- "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);
- "Torbjorn"
- 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, 0, Color(White), Color(Red), Color(White),
Visible To and String, Default Visibility);
- "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);
- "Sigma"
Create HUD Text(Filtered Array(All Players(All Teams), Hero Of(Current Array Element) == Hero(Torbjörn)), Null, Custom String(
"Primary fire does not account for bounces."), Null, Left, 0, Color(White), Color(Red), 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);
- }
- }
- 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));
- "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 = True;
- 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));
- }
- }
- 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;
- Event Player.ProjectileMaxRange = 0;
- "Set values per hero"
- If(Hero Of(Event Player) == Hero(Echo));
- Event Player.ProjectileSpeed = 50;
- Event Player.ProjectileSize = 0.150;
- Event Player.ExplosionRadius = 2.100;
- 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;
- Else If(Hero Of(Event Player) == Hero(Sigma));
- Event Player.ProjectileSpeed = 50;
- Event Player.ProjectileSize = 0.200;
- Event Player.ExplosionRadius = 3;
- Event Player.ProjectileMaxRange = 22;
- 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("--- Dummy Bots")
- {
- event
- {
- Ongoing - Global;
- }
- }
- 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
- {
- "Spawn 3 bots, facing towards the middle of the room. Save their ID in an array."
- 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)));
- Global.BotArray[0] = Last Created Entity;
- 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)));
- Global.BotArray[1] = Last Created Entity;
- 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)));
- 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);
- }
- }
- 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);
- }
- }
- 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("Create Effects")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- actions
- {
- "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, 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 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 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, 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 >= 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 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(
- 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, 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);
- }
- }
- 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("--- Swap hero")
- {
- event
- {
- Ongoing - Global;
- }
- }
- 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
- {
- 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("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
- {
- 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);
- }
- }
- 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, 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 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;
- }
- }