Return to post
- settings
- {
- main
- {
- Description: "A tool to visualise the size of many projectile and hitscan abilities. By Mitsiee"
- }
- lobby
- {
- Allow Players Who Are In Queue: Yes
- Max Spectators: 0
- Max Team 1 Players: 4
- Max Team 2 Players: 0
- }
- modes
- {
- Skirmish
- {
- enabled maps
- {
- Workshop Chamber
- }
- }
- General
- {
- Limit Roles: 2 Of Each Role Per Team
- }
- }
- heroes
- {
- General
- {
- No Ammunition Requirement: On
- Ultimate Generation: 10%
- Ultimate Generation - Combat: 0%
- Ultimate Generation - Passive: 0%
- Ana
- {
- Biotic Grenade: Off
- No Ammunition Requirement: On
- Sleep Dart: Off
- Ultimate Generation - Combat Nano Boost: 0%
- Ultimate Generation - Passive Nano Boost: 0%
- Ultimate Generation Nano Boost: 10%
- }
- Ashe
- {
- Coach Gun: Off
- Dynamite: Off
- No Ammunition Requirement: On
- Ultimate Generation - Combat B.O.B.: 0%
- Ultimate Generation - Passive B.O.B.: 0%
- Ultimate Generation B.O.B.: 10%
- }
- Baptiste
- {
- Immortality Field: Off
- No Ammunition Requirement: On
- Regenerative Burst: Off
- Secondary Fire: Off
- Ultimate Generation - Combat Amplification Matrix: 0%
- Ultimate Generation - Passive Amplification Matrix: 0%
- Ultimate Generation Amplification Matrix: 10%
- }
- Bastion
- {
- Configuration: Tank Weapon Knockback Scalar: 0%
- No Ammunition Requirement: On
- Self-Repair: Off
- Spawn With Ultimate Ready: On
- Ultimate Generation - Combat Configuration: Tank: 500%
- Ultimate Generation - Passive Configuration: Tank: 500%
- Ultimate Generation Configuration: Tank: 500%
- }
- D.Va
- {
- Spawn Without Mech: On
- }
- Echo
- {
- Flight: Off
- Focusing Beam: Off
- Glide: Off
- No Ammunition Requirement: On
- Quick Melee: Off
- Sticky Bombs: Off
- Ultimate Generation - Combat Duplicate: 0%
- Ultimate Generation - Passive Duplicate: 0%
- Ultimate Generation Duplicate: 10%
- }
- Genji
- {
- Deflect: Off
- No Ammunition Requirement: On
- Secondary Fire: Off
- Swift Strike: Off
- Ultimate Generation - Combat Dragonblade: 0%
- Ultimate Generation - Passive Dragonblade: 0%
- Ultimate Generation Dragonblade: 10%
- }
- Junkrat
- {
- Frag Launcher Knockback Scalar: 0%
- }
- Lúcio
- {
- Soundwave Knockback Scalar: 0%
- }
- McCree
- {
- Combat Roll: Off
- Flashbang: Off
- No Ammunition Requirement: On
- Secondary Fire: Off
- Ultimate Generation - Combat Deadeye: 0%
- Ultimate Generation - Passive Deadeye: 0%
- Ultimate Generation Deadeye: 10%
- }
- Mei
- {
- Cryo-Freeze: Off
- Ice Wall: Off
- No Ammunition Requirement: On
- Ultimate Generation - Combat Blizzard: 0%
- Ultimate Generation - Passive Blizzard: 0%
- Ultimate Generation Blizzard: 10%
- }
- Mercy
- {
- Guardian Angel: Off
- No Ammunition Requirement: On
- Resurrect: Off
- Ultimate Generation - Combat Valkyrie: 0%
- Ultimate Generation - Passive Valkyrie: 0%
- Ultimate Generation Valkyrie: 10%
- Weapons Enabled: Caduceus Blaster Only
- }
- Orisa
- {
- Fortify: Off
- Halt!: Off
- No Ammunition Requirement: On
- Protective Barrier: Off
- Ultimate Generation - Combat Supercharger: 0%
- Ultimate Generation - Passive Supercharger: 0%
- Ultimate Generation Supercharger: 10%
- }
- Pharah
- {
- Concussive Blast Cooldown Time: 10%
- Rocket Launcher Knockback Scalar: 0%
- }
- Reinhardt
- {
- Fire Strike Cooldown Time: 10%
- Rocket Hammer Knockback Scalar: 0%
- }
- Soldier: 76
- {
- Biotic Field: Off
- Helix Rockets Cooldown Time: 10%
- Helix Rockets Knockback Scalar: 0%
- No Ammunition Requirement: On
- Sprint: Off
- Ultimate Generation - Combat Tactical Visor: 0%
- Ultimate Generation - Passive Tactical Visor: 0%
- Ultimate Generation Tactical Visor: 10%
- }
- Widowmaker
- {
- Grappling Hook: Off
- No Ammunition Requirement: On
- Quick Melee: Off
- Ultimate Generation - Combat Infra-Sight: 0%
- Ultimate Generation - Passive Infra-Sight: 0%
- Ultimate Generation Infra-Sight: 10%
- Venom Mine: Off
- }
- Wrecking Ball
- {
- Adaptive Shield: Off
- Grappling Claw: Off
- No Ammunition Requirement: On
- Piledriver: Off
- Roll: Off
- Ultimate Generation - Combat Minefield: 0%
- Ultimate Generation - Passive Minefield: 0%
- Ultimate Generation Minefield: 10%
- }
- Zarya
- {
- Particle Cannon Secondary Knockback Scalar: 0%
- }
- Zenyatta
- {
- No Ammunition Requirement: On
- Orb of Discord: Off
- Orb of Harmony: Off
- Secondary Fire: Off
- Ultimate Generation - Combat Transcendence: 0%
- Ultimate Generation - Passive Transcendence: 0%
- Ultimate Generation Transcendence: 10%
- }
- disabled heroes
- {
- Brigitte
- Doomfist
- Echo
- Moira
- Reaper
- Roadhog
- Sigma
- Sombra
- Symmetra
- Tracer
- Winston
- }
- }
- }
- }
- 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
- }
- subroutines
- {
- 0: ProjectileRadiusCheck
- 1: TrackProjectileEffect
- 2: ClearProjectileEffects
- 3: ClearBeamEffects
- 4: FiringWeapon
- 5: CreateDummyBots
- }
- disabled rule("--- HUD")
- {
- event
- {
- Ongoing - Global;
- }
- }
- rule("Current hero info HUD")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- actions
- {
- "HUD that holds some hero projectile stats"
- Create HUD Text(Event Player, Null, Custom String("{2} Projectile radius: {0}m | Projectile speed: {1}m/s",
- Event Player.ProjectileSize, Event Player.ProjectileSpeed, Hero Icon String(Hero Of(Event Player))), Null, Left, -2, Color(
- White), Color(White), Color(White), Visible To and String, Default Visibility);
- "HUD that shows Explosion radius and Projectile delay if they are specified"
- Create HUD Text(Filtered Array(Event Player, Event Player.ProjectileDelay != 0 || Event Player.ExplosionRadius != 0), Null,
- Custom String("Explosion radius: {0}m | Projectile delay: {1}s", Event Player.ExplosionRadius, Event Player.ProjectileDelay),
- Null, Left, -1, 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);
- }
- }
- rule("Controls HUD")
- {
- event
- {
- Ongoing - Global;
- }
- actions
- {
- "Controls to remove all effects"
Create HUD Text(All Players(All Teams), Null, Custom String("Press [Ability 1] + [Interact] to remove all your effects"), Null,
Right, 2, Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
- 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(All Players(All Teams), Null, Custom String("Press [Crouch] + [Reload] + [Jump] to change hero"), Null, Right, 3,
Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
- 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(All Players(All Teams), Null, Custom String("Press [Crouch] + [Interact] to spawn a random dummy bot"), Null,
Right, 4, Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
- 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(All Players(All Teams), Null, Custom String("Press [Crouch] + [Ultimate] to toggle damage dealt"), Null, Right, 5,
Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
- 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(All Players(All Teams), Null, Custom String("Press [Ability 1] + [Ability 2] toggle path of latest projectile"),
Null, Right, 6, Color(White), Color(Sky Blue), Color(White), Visible To and String, Default Visibility);
- 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
- {
- "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);
- "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);
- "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);
- "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);
- "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);
- "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),
- 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);
- }
- }
- 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("Swap hero")
{
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);
}
}
- rule("Create Projectile Heroes array")
- {
- event
- {
- Ongoing - Global;
- }
- actions
- {
- "All projectile heroes that are currently available"
- Global.ProjectileHeroes = Array(Hero(Ana), Hero(Echo), Hero(Genji), Hero(Mei), Hero(Mercy), Hero(Orisa), Hero(Zenyatta), Hero(
- Pharah), Hero(Reinhardt), Hero(D.Va), Hero(Junkrat), Hero(Torbjörn), Hero(Hanzo), Hero(Zarya), Hero(Lúcio));
- }
- }
- rule("Is Projectile Hero? Set projectile settings")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) == True;
- }
- actions
- {
- Event Player.IsProjectileHero = True;
- "Set default values"
- Event Player.ProjectileDelay = 0;
- Event Player.ExplosionRadius = 0;
- Event Player.ProjectileTimeBetweenShots = 0;
- "Set values per hero"
- If(Hero Of(Event Player) == Hero(Echo));
- Event Player.ProjectileSpeed = 75;
- Event Player.ProjectileSize = 0.500;
- Else If(Hero Of(Event Player) == Hero(Mei));
- Event Player.ProjectileSpeed = 115;
- Event Player.ProjectileDelay = 0.400;
- Event Player.ProjectileSize = 0.150;
- Else If(Hero Of(Event Player) == Hero(Ana));
- Event Player.ProjectileSpeed = 125;
- Event Player.ProjectileSize = 0;
- Else If(Hero Of(Event Player) == Hero(Genji));
- Event Player.ProjectileSpeed = 60;
- Event Player.ProjectileSize = 0.100;
- Else If(Hero Of(Event Player) == Hero(Orisa));
- Event Player.ProjectileSpeed = 90;
- Event Player.ProjectileSize = 0.100;
- Event Player.ProjectileTimeBetweenShots = 1 / 12;
- Else If(Hero Of(Event Player) == Hero(Mercy));
- Event Player.ProjectileSpeed = 50;
- Event Player.ProjectileSize = 0.250;
- Event Player.ProjectileTimeBetweenShots = 1 / 5;
- Else If(Hero Of(Event Player) == Hero(Zenyatta));
- Event Player.ProjectileSpeed = 90;
- Event Player.ProjectileSize = 0.150;
- Else If(Hero Of(Event Player) == Hero(Pharah));
- Event Player.ProjectileSpeed = 35;
- Event Player.ProjectileSize = 0.200;
- Event Player.ExplosionRadius = 2.500;
- Else If(Hero Of(Event Player) == Hero(Reinhardt));
- Event Player.ProjectileSpeed = 25;
- Event Player.ProjectileDelay = 0.480;
- Event Player.ProjectileSize = 0.850;
- Else If(Hero Of(Event Player) == Hero(D.Va));
- Event Player.ProjectileSpeed = 50;
- Event Player.ProjectileSize = 0.250;
- Else If(Hero Of(Event Player) == Hero(Junkrat));
- Event Player.ProjectileSpeed = 25;
- Event Player.ProjectileSize = 0.200;
- Event Player.ExplosionRadius = 2;
- Else If(Hero Of(Event Player) == Hero(Torbjörn));
- Event Player.ProjectileSpeed = 70;
- Event Player.ProjectileSize = 0.100;
- Else If(Hero Of(Event Player) == Hero(Hanzo));
- Event Player.ProjectileSpeed = 110;
- Event Player.ProjectileSize = 0.100;
- Else If(Hero Of(Event Player) == Hero(Zarya));
- Event Player.ProjectileSpeed = 25;
- Event Player.ProjectileSize = 0.200;
- Event Player.ExplosionRadius = 2.500;
- Else If(Hero Of(Event Player) == Hero(Lúcio));
- Event Player.ProjectileSpeed = 50;
- Event Player.ProjectileSize = 0.150;
- End;
- }
- }
- rule("Is not projectile hero?")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Array Contains(Global.ProjectileHeroes, Hero Of(Event Player)) != True;
- }
- actions
- {
- Event Player.IsProjectileHero = False;
- Event Player.ProjectileSize = 0;
- Event Player.ProjectileDelay = 0;
- Event Player.ProjectileSpeed = 0;
- Event Player.ExplosionRadius = 0;
- }
- }
- disabled rule("--- 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);
- Is Firing Primary(Event Player) == True;
- }
- actions
- {
- "Cancel primary action in case of multi shot abilities (lucio, genji, baptiste primary fire for example)"
- Cancel Primary Action(Event Player);
- Start Rule(FiringWeapon, Do Nothing);
- }
- }
- rule("Using Secondary fire with some heroes")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Array Contains(Array(Hero(Mei), Hero(Zarya), Hero(Soldier: 76)), Hero Of(Event Player)) == True;
- Is Firing Secondary(Event Player) == True;
- }
- actions
- {
- Start Rule(FiringWeapon, Do Nothing);
- }
- }
- rule("Firing with Hanzo")
- {
- event
- {
- Ongoing - Each Player;
- All;
- All;
- }
- conditions
- {
- Hero Of(Event Player) == Hero(Hanzo);
- Is Button Held(Event Player, 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"
- Event Player.RaycastPrimaryFire[Event Player.CurrentEffectLoop] = Ray Cast Hit Position(
- Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop],
- Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop] + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * 200,
- All Players(Opposite Team Of(Team Of(Event Player))), Event Player, True);
- "Get distance from eye position to end to ray cast"
- Event Player.RaycastDistance[Event Player.CurrentEffectLoop] = Distance Between(
- Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop],
- Event Player.RaycastPrimaryFire[Event Player.CurrentEffectLoop]);
- "If Projectile has radius, send several raycasts to check if any players would get hit. If true, stop the effect"
- Call Subroutine(ProjectileRadiusCheck);
- If(Event Player.IsProjectileHero);
- Event Player.ProjectileIsMoving = True;
- "Track the projectile effect through the air"
- Call Subroutine(TrackProjectileEffect);
- Event Player.ProjectileIsMoving = False;
- End;
- "Set the final position of the effect to the nearest ray cast used to determine if the projectile hit a player or object"
- Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop] = Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop] + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * Event Player.RaycastDistance[Event Player.CurrentEffectLoop];
- Set Primary Fire Enabled(Event Player, True);
- }
- }
- rule("Subroutine [TrackProjectileEffect]")
- {
- event
- {
- Subroutine;
- TrackProjectileEffect;
- }
- actions
- {
- Event Player.ShootLoop[Event Player.CurrentEffectLoop] = 0;
- "Loop from player position to wall"
- While(Event Player.RaycastDistance[Event Player.CurrentEffectLoop] > Event Player.ShootLoop[Event Player.CurrentEffectLoop]);
- "Set current position in loop"
- Event Player.CurrentCheckPosition[Event Player.CurrentEffectLoop] = Ray Cast Hit Position(
- Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop],
- Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop] + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * Event Player.ShootLoop[Event Player.CurrentEffectLoop],
- Null, Null, True);
- Wait(0.016, Ignore Condition);
- "Set the effect to the position it traveled in 1 frame (62.5 frames per second)"
- Event Player.ShootLoop[Event Player.CurrentEffectLoop] = Event Player.ShootLoop[Event Player.CurrentEffectLoop] + Event Player.ProjectileSpeed / 62.500;
- End;
- }
- }
- rule("Subroutine [ProjectileRadiusCheck] - Check if radius of projectile would hit player")
- {
- event
- {
- Subroutine;
- ProjectileRadiusCheck;
- }
- actions
- {
- "If ShowBeamEffects is true destroy all previously created beam effects by this subroutine"
- If(Event Player.ShowBeamEffects == True);
- Call Subroutine(ClearBeamEffects);
- End;
- If(Event Player.ProjectileSize > 0);
- "DO NOT OPEN ME, THE GAME WILL CRASH"
- Event Player.ProjectileRadiusArray = Array(Vector(0, 0, 0) + Forward * Event Player.ProjectileSize,
- Left * Event Player.ProjectileSize, Right * Event Player.ProjectileSize, Up * Event Player.ProjectileSize,
- Down * Event Player.ProjectileSize, Left * Event Player.ProjectileSize * 0.702 + Up * Event Player.ProjectileSize * 0.702,
- Left * Event Player.ProjectileSize * 0.702 + Down * Event Player.ProjectileSize * 0.702,
- Right * Event Player.ProjectileSize * 0.702 + Up * Event Player.ProjectileSize * 0.702,
- Right * Event Player.ProjectileSize * 0.702 + Down * Event Player.ProjectileSize * 0.702,
- Left * Event Player.ProjectileSize * 0.924 + Up * Event Player.ProjectileSize * 0.386,
- Left * Event Player.ProjectileSize * 0.924 + Down * Event Player.ProjectileSize * 0.386,
- Right * Event Player.ProjectileSize * 0.924 + Up * Event Player.ProjectileSize * 0.386,
- Right * Event Player.ProjectileSize * 0.924 + Down * Event Player.ProjectileSize * 0.386,
- Left * Event Player.ProjectileSize * 0.386 + Up * Event Player.ProjectileSize * 0.924,
- Left * Event Player.ProjectileSize * 0.386 + Down * Event Player.ProjectileSize * 0.924,
- Right * Event Player.ProjectileSize * 0.386 + Up * Event Player.ProjectileSize * 0.924,
- Right * Event Player.ProjectileSize * 0.386 + Down * Event Player.ProjectileSize * 0.924,
- Left * Event Player.ProjectileSize * 0.500 + Forward * Event Player.ProjectileSize * 0.702,
- Right * Event Player.ProjectileSize * 0.500 + Forward * Event Player.ProjectileSize * 0.702,
- Up * Event Player.ProjectileSize * 0.500 + Forward * Event Player.ProjectileSize * 0.702,
- Down * Event Player.ProjectileSize * 0.500 + Forward * Event Player.ProjectileSize * 0.702,
- Left * Event Player.ProjectileSize * 0.500 * 0.702 + Up * Event Player.ProjectileSize * 0.500 * 0.702 + Forward * Event Player.ProjectileSize * 0.702,
- Left * Event Player.ProjectileSize * 0.500 * 0.702 + Down * Event Player.ProjectileSize * 0.500 * 0.702 + Forward * Event Player.ProjectileSize * 0.702,
- Right * Event Player.ProjectileSize * 0.500 * 0.702 + Up * Event Player.ProjectileSize * 0.500 * 0.702 + Forward * Event Player.ProjectileSize * 0.702,
- Right * Event Player.ProjectileSize * 0.500 * 0.702 + Down * Event Player.ProjectileSize * 0.500 * 0.702 + Forward * Event Player.ProjectileSize * 0.702,
- Left * Event Player.ProjectileSize * 0.500 * 0.924 + Up * Event Player.ProjectileSize * 0.500 * 0.386 + Forward * Event Player.ProjectileSize * 0.702,
- Left * Event Player.ProjectileSize * 0.500 * 0.924 + Down * Event Player.ProjectileSize * 0.500 * 0.386 + Forward * Event Player.ProjectileSize * 0.702,
- Right * Event Player.ProjectileSize * 0.500 * 0.924 + Up * Event Player.ProjectileSize * 0.500 * 0.386 + Forward * Event Player.ProjectileSize * 0.702,
- Right * Event Player.ProjectileSize * 0.500 * 0.924 + Down * Event Player.ProjectileSize * 0.500 * 0.386 + Forward * Event Player.ProjectileSize * 0.702,
- Left * Event Player.ProjectileSize * 0.500 * 0.386 + Up * Event Player.ProjectileSize * 0.500 * 0.924 + Forward * Event Player.ProjectileSize * 0.702,
- Left * Event Player.ProjectileSize * 0.500 * 0.386 + Down * Event Player.ProjectileSize * 0.500 * 0.924 + Forward * Event Player.ProjectileSize * 0.702,
- Right * Event Player.ProjectileSize * 0.500 * 0.386 + Up * Event Player.ProjectileSize * 0.500 * 0.924 + Forward * Event Player.ProjectileSize * 0.702,
- Right * Event Player.ProjectileSize * 0.500 * 0.386 + Down * Event Player.ProjectileSize * 0.500 * 0.924 + Forward * Event Player.ProjectileSize * 0.702,
- Left * Event Player.ProjectileSize * 0.750 + Forward * Event Player.ProjectileSize * 0.386,
- Right * Event Player.ProjectileSize * 0.750 + Forward * Event Player.ProjectileSize * 0.386,
- Up * Event Player.ProjectileSize * 0.750 + Forward * Event Player.ProjectileSize * 0.386,
- Down * Event Player.ProjectileSize * 0.750 + Forward * Event Player.ProjectileSize * 0.386,
- Left * Event Player.ProjectileSize * 0.750 * 0.702 + Up * Event Player.ProjectileSize * 0.750 * 0.702 + Forward * Event Player.ProjectileSize * 0.386,
- Left * Event Player.ProjectileSize * 0.750 * 0.702 + Down * Event Player.ProjectileSize * 0.750 * 0.702 + Forward * Event Player.ProjectileSize * 0.386,
- Right * Event Player.ProjectileSize * 0.750 * 0.702 + Up * Event Player.ProjectileSize * 0.750 * 0.702 + Forward * Event Player.ProjectileSize * 0.386,
- Right * Event Player.ProjectileSize * 0.750 * 0.702 + Down * Event Player.ProjectileSize * 0.750 * 0.702 + Forward * Event Player.ProjectileSize * 0.386,
- Left * Event Player.ProjectileSize * 0.750 * 0.924 + Up * Event Player.ProjectileSize * 0.750 * 0.386 + Forward * Event Player.ProjectileSize * 0.386,
- Left * Event Player.ProjectileSize * 0.750 * 0.924 + Down * Event Player.ProjectileSize * 0.750 * 0.386 + Forward * Event Player.ProjectileSize * 0.386,
- Right * Event Player.ProjectileSize * 0.750 * 0.924 + Up * Event Player.ProjectileSize * 0.750 * 0.386 + Forward * Event Player.ProjectileSize * 0.386,
- Right * Event Player.ProjectileSize * 0.750 * 0.924 + Down * Event Player.ProjectileSize * 0.750 * 0.386 + Forward * Event Player.ProjectileSize * 0.386,
- Left * Event Player.ProjectileSize * 0.750 * 0.386 + Up * Event Player.ProjectileSize * 0.750 * 0.924 + Forward * Event Player.ProjectileSize * 0.386,
- Left * Event Player.ProjectileSize * 0.750 * 0.386 + Down * Event Player.ProjectileSize * 0.750 * 0.924 + Forward * Event Player.ProjectileSize * 0.386,
- Right * Event Player.ProjectileSize * 0.750 * 0.386 + Up * Event Player.ProjectileSize * 0.750 * 0.924 + Forward * Event Player.ProjectileSize * 0.386,
- Right * Event Player.ProjectileSize * 0.750 * 0.386 + Down * Event Player.ProjectileSize * 0.750 * 0.924 + Forward * Event Player.ProjectileSize * 0.386,
- Left * Event Player.ProjectileSize * 0.250 + Forward * Event Player.ProjectileSize * 0.924,
- Right * Event Player.ProjectileSize * 0.250 + Forward * Event Player.ProjectileSize * 0.924,
- Up * Event Player.ProjectileSize * 0.250 + Forward * Event Player.ProjectileSize * 0.924,
- Down * Event Player.ProjectileSize * 0.250 + Forward * Event Player.ProjectileSize * 0.924,
- Left * Event Player.ProjectileSize * 0.250 * 0.702 + Up * Event Player.ProjectileSize * 0.250 * 0.702 + Forward * Event Player.ProjectileSize * 0.924,
- Left * Event Player.ProjectileSize * 0.250 * 0.702 + Down * Event Player.ProjectileSize * 0.250 * 0.702 + Forward * Event Player.ProjectileSize * 0.924,
- Right * Event Player.ProjectileSize * 0.250 * 0.702 + Up * Event Player.ProjectileSize * 0.250 * 0.702 + Forward * Event Player.ProjectileSize * 0.924,
- Right * Event Player.ProjectileSize * 0.250 * 0.702 + Down * Event Player.ProjectileSize * 0.250 * 0.702 + Forward * Event Player.ProjectileSize * 0.924,
- Left * Event Player.ProjectileSize * 0.250 * 0.924 + Up * Event Player.ProjectileSize * 0.250 * 0.386 + Forward * Event Player.ProjectileSize * 0.924,
- Left * Event Player.ProjectileSize * 0.250 * 0.924 + Down * Event Player.ProjectileSize * 0.250 * 0.386 + Forward * Event Player.ProjectileSize * 0.924,
- Right * Event Player.ProjectileSize * 0.250 * 0.924 + Up * Event Player.ProjectileSize * 0.250 * 0.386 + Forward * Event Player.ProjectileSize * 0.924,
- Right * Event Player.ProjectileSize * 0.250 * 0.924 + Down * Event Player.ProjectileSize * 0.250 * 0.386 + Forward * Event Player.ProjectileSize * 0.924,
- Left * Event Player.ProjectileSize * 0.250 * 0.386 + Up * Event Player.ProjectileSize * 0.250 * 0.924 + Forward * Event Player.ProjectileSize * 0.924,
- Left * Event Player.ProjectileSize * 0.250 * 0.386 + Down * Event Player.ProjectileSize * 0.250 * 0.924 + Forward * Event Player.ProjectileSize * 0.924,
- Right * Event Player.ProjectileSize * 0.250 * 0.386 + Up * Event Player.ProjectileSize * 0.250 * 0.924 + Forward * Event Player.ProjectileSize * 0.924,
- Right * Event Player.ProjectileSize * 0.250 * 0.386 + Down * Event Player.ProjectileSize * 0.250 * 0.924 + Forward * Event Player.ProjectileSize * 0.924);
- Else;
- Event Player.ProjectileRadiusArray = Array(Vector(0, 0, 0));
- End;
- "Loop through a series of circle positions to see if projectile hits on any of it's sides"
- For Player Variable(Event Player, ProjectileRadiusArrayLoop, 0, Count Of(Event Player.ProjectileRadiusArray), 1);
- "The the position relative to the player"
- Event Player.ProjectileRadiusPlayerHit = Vector(0, Y Component Of(
- Event Player.EyePositionWhenFired[Event Player.CurrentEffectLoop]), 0) + World Vector Of(
- Event Player.ProjectileRadiusArray[Event Player.ProjectileRadiusArrayLoop], Event Player, Rotation And Translation);
- "Show a ton of beams to indicate the path of the projectile"
- If(Event Player.ShowBeamEffects == True);
- Create Beam Effect(All Players(All Teams), Grapple Beam, Event Player.ProjectileRadiusPlayerHit,
- Event Player.ProjectileRadiusPlayerHit + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * 100, Color(White),
- None);
- Event Player.ProjectilePathEffects = Append To Array(Event Player.ProjectilePathEffects, Last Created Entity);
- End;
- "Get distance using ray cast to see if it hits a player, or any other world object"
- Event Player.ProjectileRadiusArray[Event Player.ProjectileRadiusArrayLoop] = Distance Between(
- Event Player.ProjectileRadiusPlayerHit, Ray Cast Hit Position(Event Player.ProjectileRadiusPlayerHit,
- Event Player.ProjectileRadiusPlayerHit + Event Player.FacingDirection[Event Player.CurrentEffectLoop] * 100, All Players(
- Opposite Team Of(Team Of(Event Player))), Event Player, True));
- End;
- "Sort array from lowest to higher distance"
- Event Player.ProjectileRadiusArray = Sorted Array(Event Player.ProjectileRadiusArray, Current Array Element);
- "Grab the first item from the array, it being the closest to the event player"
- Event Player.RaycastDistance[Event Player.CurrentEffectLoop] = First Of(Event Player.ProjectileRadiusArray);
- }
- }
- rule("Subroutine [ClearProjectileEffects] - Reset all projectile effects made by the event player")
- {
- event
- {
- Subroutine;
- ClearProjectileEffects;
- }
- actions
- {
- Event Player.CurrentCheckPosition = Empty Array;
- Event Player.ShootLoop = Empty Array;
- Event Player.CurrentEffectLoop = 0;
- Call Subroutine(ClearBeamEffects);
- }
- }
- rule("Subroutine [ClearBeamEffects] - Reset all beam effects associated with projectile paths")
- {
- event
- {
- Subroutine;
- ClearBeamEffects;
- }
- actions
- {
- While(Count Of(Event Player.ProjectilePathEffects));
- Destroy Effect(Last Of(Event Player.ProjectilePathEffects));
- Event Player.ProjectilePathEffects = Remove From Array(Event Player.ProjectilePathEffects, Last Of(
- Event Player.ProjectilePathEffects));
- End;
- Event Player.ProjectilePathEffects = Empty Array;
- }
- }
- disabled rule("--- 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;
- }
- }