Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "Junkerpocalypse\r\n\r\nA dynamically generated PvE experience\r\n\r\nDefend a hero against an army of enemies! Each round is dynamically generated from a huge selection of enemies, so it's different each time you play! If all of the players or the hero they're defending die the game is over. Stand in the yellow circle around a dead teammate to revive them. This will take longer with each death.\r\n\r\nVersion 2.82\r\n\r\nShare Code: P4K9M\r\n\r\nOriginally made by Squ1dward #1665"
  • Mode Name: "Junkerpocalypse"
  • }
  • lobby
  • {
  • Allow Players Who Are In Queue: Yes
  • Map Rotation: After A Game
  • Max Team 1 Players: 0
  • Max Team 2 Players: 4
  • Return To Lobby: Never
  • Swap Teams After Match: No
  • }
  • modes
  • {
  • Assault
  • {
  • Capture Speed Modifier: 10%
  • }
  • Control
  • {
  • Capture Speed Modifier: 10%
  • Limit Valid Control Points: First
  • Scoring Speed Modifier: 10%
  • }
  • Escort
  • {
  • Payload Speed Modifier: 10%
  • }
  • Hybrid
  • {
  • Capture Speed Modifier: 10%
  • Payload Speed Modifier: 10%
  • }
  • General
  • {
  • Game Mode Start: Immediately
  • Spawn Health Packs: Disabled
  • }
  • }
  • heroes
  • {
  • Team 1
  • {
  • Ana
  • {
  • Damage Dealt: 50%
  • Healing Dealt: 200%
  • Healing Received: 50%
  • Movement Speed: 110%
  • Projectile Speed: 125%
  • }
  • Ashe
  • {
  • Damage Dealt: 150%
  • Dynamite Cooldown Time: 0%
  • Health: 125%
  • No Ammunition Requirement: On
  • }
  • Baptiste
  • {
  • Damage Dealt: 35%
  • Healing Dealt: 300%
  • Healing Received: 10%
  • Health: 150%
  • Immortality Field Cooldown Time: 25%
  • Movement Speed: 110%
  • No Ammunition Requirement: On
  • Projectile Gravity: 200%
  • Projectile Speed: 20%
  • Regenerative Burst Cooldown Time: 0%
  • }
  • Bastion
  • {
  • Damage Dealt: 55%
  • Health: 300%
  • Infinite Ultimate Duration: On
  • Movement Speed: 90%
  • Projectile Speed: 200%
  • }
  • Brigitte
  • {
  • Barrier Shield Cooldown Time: 200%
  • Damage Dealt: 65%
  • Healing Dealt: 200%
  • Healing Received: 10%
  • Health: 250%
  • Movement Speed: 90%
  • Repair Pack Cooldown Time: 0%
  • Shield Bash Cooldown Time: 0%
  • Whip Shot Cooldown Time: 0%
  • Whip Shot Knockback Scalar: 75%
  • }
  • D.Va
  • {
  • Boosters Cooldown Time: 0%
  • Boosters Knockback Scalar: 150%
  • Damage Dealt: 40%
  • Healing Received: 50%
  • Health: 500%
  • Movement Speed: 90%
  • Spawn With Ultimate Ready: On
  • }
  • Doomfist
  • {
  • Damage Dealt: 60%
  • Health: 200%
  • Movement Speed: 110%
  • Rising Uppercut Cooldown Time: 0%
  • Rocket Punch Cooldown Time: 0%
  • Rocket Punch Knockback Scalar: 50%
  • Seismic Slam Cooldown Time: 0%
  • }
  • Echo
  • {
  • Ammunition Clip Size Scalar: 150%
  • Damage Dealt: 95%
  • Health: 125%
  • Movement Speed: 175%
  • Projectile Speed: 150%
  • }
  • Genji
  • {
  • Ammunition Clip Size Scalar: 200%
  • Damage Dealt: 50%
  • Deflect Cooldown Time: 45%
  • Health: 125%
  • Infinite Ultimate Duration: On
  • Movement Speed: 135%
  • Projectile Speed: 125%
  • }
  • Hanzo
  • {
  • Damage Dealt: 35%
  • Health: 125%
  • Lunge Cooldown Time: 0%
  • Lunge Distance Scalar: 150%
  • Movement Speed: 110%
  • Projectile Gravity: 0%
  • Projectile Speed: 75%
  • Storm Arrows Cooldown Time: 0%
  • Storm Arrows Quantity: 10
  • }
  • Junkrat
  • {
  • Ammunition Clip Size Scalar: 250%
  • Concussion Mine Cooldown Time: 0%
  • Damage Dealt: 90%
  • Frag Launcher Knockback Scalar: 250%
  • Health: 250%
  • Movement Speed: 95%
  • }
  • Lúcio
  • {
  • Amp It Up Cooldown Time: 0%
  • Damage Dealt: 110%
  • Healing Dealt: 125%
  • Healing Received: 10%
  • Health: 300%
  • Movement Speed: 125%
  • Projectile Speed: 150%
  • }
  • McCree
  • {
  • Ammunition Clip Size Scalar: 200%
  • Combat Roll Cooldown Time: 0%
  • Damage Dealt: 30%
  • Health: 250%
  • Movement Speed: 90%
  • }
  • Mei
  • {
  • Cryo-Freeze Cooldown Time: 0%
  • Damage Dealt: 40%
  • Health: 250%
  • Ice Wall Cooldown Time: 0%
  • Movement Speed: 110%
  • Weapon Freeze Duration Scalar: 125%
  • Weapon Freeze Rate Scalar: 60%
  • }
  • Mercy
  • {
  • Health: 150%
  • Movement Speed: 110%
  • Weapons Enabled: Caduceus Staff Only
  • }
  • Moira
  • {
  • Biotic Orb Cooldown Time: 0%
  • Biotic Orb Max Damage Scalar: 500%
  • Damage Dealt: 95%
  • Fade Cooldown Time: 0%
  • Healing Dealt: 150%
  • Healing Received: 10%
  • Health: 300%
  • Infinite Ultimate Duration: On
  • Movement Speed: 110%
  • Spawn With Ultimate Ready: On
  • Ultimate Generation - Combat Coalescence: 500%
  • Ultimate Generation - Passive Coalescence: 500%
  • Ultimate Generation Coalescence: 500%
  • }
  • Orisa
  • {
  • Ammunition Clip Size Scalar: 200%
  • Damage Dealt: 110%
  • Fortify Cooldown Time: 0%
  • Healing Received: 50%
  • Health: 500%
  • Jump Vertical Speed: 150%
  • Movement Speed: 90%
  • Projectile Speed: 110%
  • Protective Barrier Cooldown Time: 0%
  • }
  • Pharah
  • {
  • Concussive Blast Cooldown Time: 60%
  • Damage Dealt: 60%
  • Health: 125%
  • Hover Jets Unlimited Fuel: On
  • Movement Speed: 90%
  • Projectile Speed: 130%
  • Rocket Launcher Knockback Scalar: 35%
  • }
  • Reaper
  • {
  • Damage Dealt: 145%
  • Health: 200%
  • Movement Speed: 70%
  • Wraith Form Cooldown Time: 0%
  • }
  • Reinhardt
  • {
  • Barrier Field Cooldown Time: 300%
  • Charge Cooldown Time: 50%
  • Damage Dealt: 125%
  • Fire Strike Cooldown Time: 50%
  • Healing Received: 50%
  • Health: 400%
  • Movement Speed: 110%
  • }
  • Roadhog
  • {
  • Ammunition Clip Size Scalar: 150%
  • Chain Hook Cooldown Time: 75%
  • Damage Dealt: 225%
  • Healing Dealt: 200%
  • Healing Received: 50%
  • Health: 500%
  • Movement Speed: 75%
  • Take a Breather Cooldown Time: 0%
  • }
  • Sigma
  • {
  • Accretion Cooldown Time: 0%
  • Damage Dealt: 90%
  • Healing Received: 50%
  • Health: 500%
  • Movement Speed: 90%
  • Projectile Speed: 300%
  • }
  • Soldier: 76
  • {
  • Ammunition Clip Size Scalar: 200%
  • Damage Dealt: 60%
  • Health: 125%
  • Helix Rockets Cooldown Time: 0%
  • Movement Speed: 110%
  • Projectile Speed: 110%
  • }
  • Sombra
  • {
  • Ammunition Clip Size Scalar: 200%
  • Damage Dealt: 45%
  • Health: 175%
  • Movement Speed: 110%
  • Stealth Cooldown Time: 0%
  • Translocator Cooldown Time: 0%
  • }
  • Symmetra
  • {
  • Ammunition Clip Size Scalar: 200%
  • Damage Dealt: 125%
  • Health: 200%
  • Movement Speed: 80%
  • Projectile Speed: 120%
  • Sentry Turret Cooldown Time: 0%
  • }
  • Torbjörn
  • {
  • Damage Dealt: 125%
  • Deploy Turret Cooldown Time: 0%
  • Health: 250%
  • Movement Speed: 90%
  • Overload Cooldown Time: 0%
  • }
  • Tracer
  • {
  • Blink Cooldown Time: 0%
  • Damage Dealt: 30%
  • Health: 175%
  • Movement Speed: 125%
  • No Ammunition Requirement: On
  • Recall Cooldown Time: 0%
  • }
  • Widowmaker
  • {
  • Damage Dealt: 75%
  • Grappling Hook Cooldown Time: 0%
  • Health: 125%
  • Movement Speed: 110%
  • Venom Mine Cooldown Time: 0%
  • }
  • Winston
  • {
  • Damage Dealt: 80%
  • Healing Received: 50%
  • Health: 300%
  • Infinite Ultimate Duration: On
  • Jump Pack Knockback Scalar: 350%
  • Movement Speed: 90%
  • Primal Rage Melee Knockback Scalar: 45%
  • Spawn With Ultimate Ready: On
  • }
  • Wrecking Ball
  • {
  • Ammunition Clip Size Scalar: 300%
  • Damage Dealt: 150%
  • Damage Received: 90%
  • Healing Received: 50%
  • Health: 500%
  • Jump Vertical Speed: 300%
  • Movement Speed: 90%
  • Piledriver Cooldown Time: 0%
  • }
  • Zarya
  • {
  • Ammunition Clip Size Scalar: 250%
  • Damage Dealt: 40%
  • Healing Received: 50%
  • Health: 500%
  • Movement Speed: 80%
  • Particle Barrier Cooldown Time: 40%
  • Projectile Gravity: 0%
  • Projectile Speed: 80%
  • }
  • Zenyatta
  • {
  • Damage Dealt: 125%
  • Health: 300%
  • Movement Speed: 90%
  • Projectile Speed: 70%
  • }
  • }
  • Team 2
  • {
  • Ultimate Generation - Combat: 80%
  • Symmetra
  • {
  • Sentry Turret: Off
  • }
  • Torbjörn
  • {
  • Deploy Turret: Off
  • }
  • }
  • }
  • extensions
  • {
  • Buff Status Effects
  • Debuff Status Effects
  • Explosion Sounds
  • Spawn More Dummy Bots
  • }
  • }
  • variables
  • {
  • global:
  • 3: OldCam
  • 4: SpawnPos
  • 7: EnemySpawns
  • 26: Camera
  • 27: CameraLook
  • 28: Round
  • 29: Enemies
  • 30: FriendlyMercy
  • 31: TroopList
  • 33: RoundPoints
  • 34: TankList
  • 35: MinibossList
  • 36: BossList
  • 37: MinibossRound
  • 38: BossRound
  • 39: Troops
  • 40: Tanks
  • 41: Minibosses
  • 42: Bosses
  • 43: EnemyCount
  • 44: ForceTroop
  • 45: ForceTank
  • 46: ForceMiniboss
  • 47: ForceBoss
  • 48: SpecialRound
  • 49: SpecialRing
  • 50: SpecialIcon
  • 51: SpecialPos
  • 52: MissionComplete
  • 53: LastHero
  • 54: TypeUnlock
  • 55: ForceMod
  • 56: BossRate
  • 57: MinibossRate
  • 58: TankRate
  • 59: TroopRate
  • 60: AlternateForms
  • 61: Story
  • 62: SpawnTarg
  • 63: Spawned
  • 64: SpawnKey
  • 65: SpawnText
  • 66: SceneTarg
  • 67: PlayerMods
  • 68: ModNames
  • 69: ModDescriptions
  • 70: ArenaFX
  • 71: DifficultyText
  • 72: CanSwap
  • 73: UltimateForms
  • 74: UpgradedMods
  • 75: ArenaCenter
  • 76: ArenaSize
  • 77: EscortGoal
  • 78: CompatibilityMode
  • 79: EnemyDelay
  • 80: TeleDelay
  • 81: Type1
  • 82: Type2
  • 83: Type3
  • 84: Type4
  • 85: TempID
  • 86: TempCount
  • 87: TempControl
  • 88: TempBoss
  • 89: TempTroop
  • 90: TempTank
  • 91: TempMiniboss
  • 92: FinalRound
  • 93: FastMode
  • 94: RandomTroop
  • 95: RandomTank
  • 96: RandomMiniboss
  • 97: RandomBoss
  • 98: UnlockLvl
  • 99: FinalBoss
  • 100: Cutscene
  • player:
  • 5: Range
  • 26: Group
  • 27: Resistance
  • 28: ImpactMultiplier
  • 29: DefendIcon
  • 30: ReviveLocation
  • 31: SpecialTele
  • 32: SpecialType
  • 33: SpecialEffect
  • 34: SpecialIcon
  • 35: ThanksTimer
  • 36: AltForm
  • 37: AltOrb
  • 38: HideOrb
  • 39: Spawnfx
  • 40: Spawnfx2
  • 43: AbilityCheck
  • 44: Active
  • 45: ForLoop
  • 46: ForLoopArray
  • 47: ModChoice
  • 48: ModHUDs
  • 49: SelectText
  • 50: ModListLoop
  • 51: ModsPicked
  • 52: Rider
  • 53: Riding
  • 54: AmbientEffects
  • 55: Down
  • 56: ReviveFX
  • 57: DownTimer
  • 58: ReviveStuff
  • 59: ReviveFx2
  • 60: ReviveFx3
  • 61: UltForm
  • 63: DoubleJump
  • 64: CheckPos
  • 65: CheckPos2
  • 66: BurnOrigin
  • 67: LifeLink
  • 68: LinkBeam
  • 69: LinkHUD
  • 70: LinkHUD2
  • 71: LinkHUD3
  • 72: FloatTarg
  • 73: FloatOffset
  • 74: FloatBase
  • 75: FloatCooldown
  • 76: LinkHUD4
  • 77: TeleLimit
  • 78: Teleporting
  • 79: ReviveFX4
  • 81: Dodge
  • 82: Miss
  • 83: MissX
  • 84: MissY
  • 85: MissBase
  • 86: Loops
  • 87: Healer
  • 88: Armor
  • 89: ArmorCD
  • 90: MercyHP
  • 91: MercyHPCD
  • 92: DmgBurn
  • 93: HealBurn
  • 94: BurnDOT
  • 95: HealPl
  • 96: HealFX
  • 97: HealHOT
  • 98: DodgeSpeed
  • 99: EnemyDmgMod
  • 100: StrongBuff
  • 101: StrongFX
  • 102: StrongHealth
  • 103: DurableHP
  • 104: Avoid
  • 105: FriendlyAIState
  • 106: FastShield
  • 107: RecentDamage
  • 108: LastKnown
  • }
  • rule("Junkerpocalypse PvE works on all Assault, Escort, Hybrid, and Control maps - Squ1dward")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.TroopRate = 1;
  • Global.TankRate = 0.300;
  • Global.MinibossRate = 0.050;
  • Global.BossRate = 0.025;
  • Disable Inspector Recording;
  • Global.FinalRound = Workshop Setting Integer(Custom String("Basic Settings"), Custom String("Final Round"), 30, 27, 999, 0);
  • Global.FastMode = Workshop Setting Toggle(Custom String("Basic Settings"), Custom String("Quick Game"), True, 0);
  • Global.RandomTroop = Array(Hero(Ana), Hero(Ashe), Hero(Baptiste), Hero(Echo), Hero(Genji), Hero(Hanzo), Hero(Pharah), Hero(
  • Soldier: 76), Hero(Sombra), Hero(Tracer), Hero(Widowmaker));
  • Global.RandomTank = Array(Hero(Brigitte), Hero(Doomfist), Hero(Junkrat), Hero(McCree), Hero(Mei), Hero(Reaper), Hero(Symmetra));
  • Global.RandomMiniboss = Array(Hero(Bastion), Hero(Lúcio), Hero(Mercy), Hero(Moira), Hero(Torbjörn), Hero(Zenyatta));
  • Global.RandomBoss = Array(Hero(D.Va), Hero(Orisa), Hero(Reinhardt), Hero(Roadhog), Hero(Sigma), Hero(Winston), Hero(Wrecking Ball),
  • Hero(Zarya));
  • disabled Global.UnlockLvl = -1;
  • }
  • }
  • rule("Junkertown Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Junkertown);
  • disabled Global.F == 1;
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Junkertown));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(-31.690, 6.168, -19.543);
  • Global.ArenaCenter = Vector(-26, -10, -31);
  • Global.ArenaSize = 26;
  • Global.EscortGoal = Vector(-93, 5, -119);
  • Global.CompatibilityMode = False;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(-48.122, 11.320, -39.458);
  • Global.EnemySpawns[1] = Vector(-34.581, 15, -41.543);
  • Global.EnemySpawns[2] = Vector(-12.929, 15, -32.269);
  • Global.EnemySpawns[3] = Vector(-13.440, 15, -43.186);
  • Global.EnemySpawns[4] = Vector(-28.867, 15, -46.523);
  • Global.EnemySpawns[5] = Vector(-24.693, 15, -51.979);
  • Global.EnemySpawns[6] = Vector(-40.206, 15, -22.352);
  • Global.EnemySpawns[7] = Vector(-21.054, 5.584, -15.724);
  • Global.EnemySpawns[8] = Vector(-43.403, 6.473, -30.649);
  • End;
  • }
  • }
  • rule("Hanamura Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled (Current Map == Map(Hanamura) || Current Map == Map(Hanamura Winter)) == True;
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If((Current Map == Map(Hanamura) || Current Map == Map(Hanamura Winter)) == True);
  • "Compatibility Mode allows enemies to redeploy closer to players if their super advanced straight line pathfinding can't figure out how to get to the players. It's important for using maps with more cover than Junkertown."
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(-9.710, 0.427, -83.392);
  • Global.ArenaCenter = Vector(-6, -2, -79);
  • Global.ArenaSize = 28;
  • Global.EscortGoal = Vector(66.742, -1.667, -0.287);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(2.393, 6.352, -71.365);
  • Global.EnemySpawns[1] = Vector(4.704, 8.359, -86.151);
  • Global.EnemySpawns[2] = Vector(-3.157, 3.889, -82.645);
  • Global.EnemySpawns[3] = Vector(-8.552, 3.892, -76.860);
  • Global.EnemySpawns[4] = Vector(-26.425, 2.352, -69.733);
  • End;
  • }
  • }
  • rule("Lunar Colony Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Horizon Lunar Colony);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Horizon Lunar Colony));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(53.381, 8.352, -50.162);
  • Global.ArenaCenter = Vector(50, 5, -43);
  • Global.ArenaSize = 38;
  • Global.EscortGoal = Vector(-25.836, 3.224, -123.784);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(52.871, 17.348, -73.317);
  • Global.EnemySpawns[1] = Vector(59.758, 10.849, -62.824);
  • Global.EnemySpawns[2] = Vector(46.923, 14.402, -38.652);
  • Global.EnemySpawns[3] = Vector(20.381, 14.348, -34.585);
  • Global.EnemySpawns[4] = Vector(48.692, 8.349, -16.100);
  • End;
  • }
  • }
  • rule("Paris Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Paris);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Paris));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(-92.017, 13.348, -75.887);
  • Global.ArenaCenter = Vector(-89, 10, -70);
  • Global.ArenaSize = 38;
  • Global.EscortGoal = Vector(8.872, 10.373, -59.089);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(-75.735, 18.570, -43.234);
  • Global.EnemySpawns[1] = Vector(-85.865, 13.348, -63.576);
  • Global.EnemySpawns[2] = Vector(-99.809, 17.376, -91.801);
  • Global.EnemySpawns[3] = Vector(-80.705, 17.373, -83.406);
  • Global.EnemySpawns[4] = Vector(-117.825, 11.287, -60.720);
  • End;
  • }
  • }
  • rule("Temple of Anubis Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Temple of Anubis);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Temple of Anubis));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(-9.633, 6.215, 86.815);
  • Global.ArenaCenter = Vector(-9, 3, 100);
  • Global.ArenaSize = 29;
  • Global.EscortGoal = Vector(0.139, -1.533, -10.398);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(-9.652, 15.779, 82.443);
  • Global.EnemySpawns[1] = Vector(-16.424, 12.244, 109.388);
  • Global.EnemySpawns[2] = Vector(-8.033, 6.012, 109.279);
  • Global.EnemySpawns[3] = Vector(14.571, 6.839, 107.970);
  • Global.EnemySpawns[4] = Vector(1.666, 5.482, 98.228);
  • End;
  • }
  • }
  • rule("Volskaya Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Volskaya Industries);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Volskaya Industries));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(-23, -3, 49);
  • Global.ArenaCenter = Vector(-23, -6, 49);
  • Global.ArenaSize = 34;
  • Global.EscortGoal = Vector(-108.160, -2.132, 40.563);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(-37.767, -2.813, 73.922);
  • Global.EnemySpawns[1] = Vector(-11.396, 2.618, 74.141);
  • Global.EnemySpawns[2] = Vector(-18.011, 4.312, 55.354);
  • Global.EnemySpawns[3] = Vector(-8.777, 5.446, 45.762);
  • Global.EnemySpawns[4] = Vector(-27.956, 4.172, 38.321);
  • End;
  • }
  • }
  • rule("Dorado Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Dorado);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Dorado));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(73.538, 8.303, -11.542);
  • Global.ArenaCenter = Vector(61, 5, -21);
  • Global.ArenaSize = 28;
  • Global.EscortGoal = Vector(183.882, 14.149, 40.988);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(63.325, 8.962, -7.013);
  • Global.EnemySpawns[1] = Vector(76.333, 12.348, -18.319);
  • Global.EnemySpawns[2] = Vector(45.775, 8.468, -14.049);
  • Global.EnemySpawns[3] = Vector(70.607, 12.363, -29.723);
  • Global.EnemySpawns[4] = Vector(60.452, 8.110, -39.018);
  • End;
  • }
  • }
  • rule("Havana Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Havana);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Havana));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(-31.784, 7.199, -74.206);
  • Global.ArenaCenter = Vector(-21, 4, -67);
  • Global.ArenaSize = 40;
  • Global.EscortGoal = Vector(139.745, 6.410, -46.652);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(-25.055, 11.408, -71.466);
  • Global.EnemySpawns[1] = Vector(-2.791, 13.786, -79.588);
  • Global.EnemySpawns[2] = Vector(-29.974, 16.812, -83.654);
  • Global.EnemySpawns[3] = Vector(-38.253, 9.838, -71.353);
  • Global.EnemySpawns[4] = Vector(-28.975, 13.349, -51.587);
  • End;
  • }
  • }
  • rule("Rialto Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Rialto);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Rialto));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(64.628, 0.949, -44.319);
  • Global.ArenaCenter = Vector(58, -1, -56);
  • Global.ArenaSize = 29;
  • Global.EscortGoal = Vector(-57.081, 3.152, -131.469);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(54.059, 7.123, -40.966);
  • Global.EnemySpawns[1] = Vector(43.808, 7.098, -54.911);
  • Global.EnemySpawns[2] = Vector(54.726, 1.098, -74.396);
  • Global.EnemySpawns[3] = Vector(56.792, 1.967, -55.986);
  • Global.EnemySpawns[4] = Vector(38.418, 1.098, -73.008);
  • End;
  • }
  • }
  • rule("Route 66 Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Route 66);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Route 66));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(25.340, 3.444, 17.722);
  • Global.ArenaCenter = Vector(31, 0, -3);
  • Global.ArenaSize = 33;
  • Global.EscortGoal = Vector(-92.650, 6.879, -23.597);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(53.269, 14.214, 9.939);
  • Global.EnemySpawns[1] = Vector(21.658, 8.163, 17.296);
  • Global.EnemySpawns[2] = Vector(20.390, 7.303, -3.475);
  • Global.EnemySpawns[3] = Vector(20.220, 9.402, -19.271);
  • Global.EnemySpawns[4] = Vector(36.843, 3.543, 15.200);
  • End;
  • }
  • }
  • rule("Watchpoint Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Watchpoint: Gibraltar);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Watchpoint: Gibraltar));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(25.407, -3.442, -73.445);
  • Global.ArenaCenter = Vector(19, -10, -80);
  • Global.ArenaSize = 31;
  • Global.EscortGoal = Vector(82.274, -1.868, 39.688);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(22.258, 5.650, -64.084);
  • Global.EnemySpawns[1] = Vector(26.024, 4.362, -85.576);
  • Global.EnemySpawns[2] = Vector(27.385, 1.348, -99.375);
  • Global.EnemySpawns[3] = Vector(10.159, -0.649, -96.461);
  • Global.EnemySpawns[4] = Vector(22.517, -3.633, -58.156);
  • End;
  • }
  • }
  • rule("Blizworld Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled (Current Map == Map(Blizzard World) || Current Map == Map(Blizzard World Winter)) == True;
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If((Current Map == Map(Blizzard World) || Current Map == Map(Blizzard World Winter)) == True);
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(3.009, 1.256, 28.295);
  • Global.ArenaCenter = Vector(3, -5, 38);
  • Global.ArenaSize = 28;
  • Global.EscortGoal = Vector(-122.300, 0.196, 110.972);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(-3.251, 7.414, 52.979);
  • Global.EnemySpawns[1] = Vector(-11.900, 2.364, 35.633);
  • Global.EnemySpawns[2] = Vector(12.131, 1.349, 28.624);
  • Global.EnemySpawns[3] = Vector(2.934, 3.972, 4.324);
  • Global.EnemySpawns[4] = Vector(3.066, 4.956, 39.483);
  • End;
  • }
  • }
  • rule("Eichenwalde Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled (Current Map == Map(Eichenwalde) || Current Map == Map(Eichenwalde Halloween)) == True;
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If((Current Map == Map(Eichenwalde) || Current Map == Map(Eichenwalde Halloween)) == True);
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(119.220, 10.068, -42.037);
  • Global.ArenaCenter = Vector(123, 7, -33);
  • Global.ArenaSize = 33;
  • Global.EscortGoal = Vector(-11.580, 0.188, -11.994);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(128.508, 17.190, -36.017);
  • Global.EnemySpawns[1] = Vector(125.239, 17.179, -19.489);
  • Global.EnemySpawns[2] = Vector(118.824, 20.206, -44.473);
  • Global.EnemySpawns[3] = Vector(123.569, 20.208, -21.282);
  • Global.EnemySpawns[4] = Vector(110.431, 15.190, -46.998);
  • End;
  • }
  • }
  • rule("Hollywood Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled (Current Map == Map(Hollywood) || Current Map == Map(Hollywood Halloween)) == True;
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If((Current Map == Map(Hollywood) || Current Map == Map(Hollywood Halloween)) == True);
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(-26.202, 1.091, -97.008);
  • Global.ArenaCenter = Vector(-25, 0, -109);
  • Global.ArenaSize = 32;
  • Global.EscortGoal = Vector(-2.624, 0.203, 54.419);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(-20.654, 11.102, -99.595);
  • Global.EnemySpawns[1] = Vector(-6.891, 16.666, -105.923);
  • Global.EnemySpawns[2] = Vector(-24.235, 4.389, -91.601);
  • Global.EnemySpawns[3] = Vector(-36.720, 8.534, -112.698);
  • Global.EnemySpawns[4] = Vector(-26.610, 8.556, -133.259);
  • End;
  • }
  • }
  • rule("King's Row Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled (Current Map == Map(King's Row) || Current Map == Map(King's Row Winter)) == True;
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If((Current Map == Map(King's Row) || Current Map == Map(King's Row Winter)) == True);
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(-63.432, 1.022, -23.844);
  • Global.ArenaCenter = Vector(-63, -2, -16);
  • Global.ArenaSize = 33;
  • Global.EscortGoal = Vector(-148.692, -2.507, 24.213);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(-67.343, 5.848, -34.753);
  • Global.EnemySpawns[1] = Vector(-60.212, 6.305, -17.173);
  • Global.EnemySpawns[2] = Vector(-87.346, 8.283, -18.460);
  • Global.EnemySpawns[3] = Vector(-78.368, 1.384, 5.474);
  • Global.EnemySpawns[4] = Vector(-61.309, 4.351, -4.935);
  • End;
  • }
  • }
  • rule("Numbani Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Numbani);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Numbani));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(125.360, -2.834, 6.753);
  • Global.ArenaCenter = Vector(127, -6, 15);
  • Global.ArenaSize = 32;
  • Global.EscortGoal = Vector(6.048, 0.174, 6.024);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(137.554, 4.413, 19.493);
  • Global.EnemySpawns[1] = Vector(118.913, 6.425, 4.121);
  • Global.EnemySpawns[2] = Vector(125.082, 1.616, 12.185);
  • Global.EnemySpawns[3] = Vector(99.799, 1.687, 27.349);
  • Global.EnemySpawns[4] = Vector(146.715, -0.137, 36.615);
  • End;
  • }
  • }
  • rule("Busan Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Busan);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Busan));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(18.064, 14.284, -125.754);
  • Global.ArenaCenter = Vector(22, 5, -124);
  • Global.ArenaSize = 27;
  • Global.EscortGoal = Vector(107.832, 16.284, -125.658);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(24.539, 21.351, -112.628);
  • Global.EnemySpawns[1] = Vector(12.440, 24.309, -129.978);
  • Global.EnemySpawns[2] = Vector(-1.447, 17.283, -125.564);
  • Global.EnemySpawns[3] = Vector(38.747, 11.284, -116.937);
  • Global.EnemySpawns[4] = Vector(18.794, 14.351, -137.497);
  • End;
  • }
  • }
  • rule("Illios Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Ilios);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Ilios));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(339.279, -23.357, -2.970);
  • Global.ArenaCenter = Vector(322, -28, -3);
  • Global.ArenaSize = 35;
  • Global.EscortGoal = Vector(282.698, -25.301, -87.948);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(332.554, -19.391, 11.133);
  • Global.EnemySpawns[1] = Vector(336.644, -16.442, -16.922);
  • Global.EnemySpawns[2] = Vector(330.926, -16.305, -31.698);
  • Global.EnemySpawns[3] = Vector(352.294, -19.215, -5.184);
  • Global.EnemySpawns[4] = Vector(316.892, -22.290, -21.582);
  • End;
  • }
  • }
  • rule("Lijiang Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled (Current Map == Map(Lijiang Tower) || Current Map == Map(Lijiang Tower Lunar New Year)) == True;
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If((Current Map == Map(Lijiang Tower) || Current Map == Map(Lijiang Tower Lunar New Year)) == True);
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(36.271, 1.209, -23.010);
  • Global.ArenaCenter = Vector(39, -1, -13);
  • Global.ArenaSize = 34;
  • Global.EscortGoal = Vector(-58.621, 2.348, -31.296);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(46.318, 9.538, -32.113);
  • Global.EnemySpawns[1] = Vector(39.196, 6.282, -16.019);
  • Global.EnemySpawns[2] = Vector(23.188, 7.348, -28.183);
  • Global.EnemySpawns[3] = Vector(16.162, 1.351, -18.829);
  • Global.EnemySpawns[4] = Vector(43.978, 6.987, -44.431);
  • End;
  • }
  • }
  • rule("Nepal Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Nepal);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Nepal));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(-196.094, -93.753, -45.870);
  • Global.ArenaCenter = Vector(-171, -99, -37);
  • Global.ArenaSize = 34;
  • Global.EscortGoal = Vector(-167.748, -98.969, 68.286);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(-182.233, -88.752, -30.240);
  • Global.EnemySpawns[1] = Vector(-168.993, -88.776, -43.240);
  • Global.EnemySpawns[2] = Vector(-193.207, -90.527, -48.417);
  • Global.EnemySpawns[3] = Vector(-159.791, -86.589, -11.310);
  • Global.EnemySpawns[4] = Vector(-201.226, -92.672, -29.491);
  • End;
  • }
  • }
  • rule("Oasis Config")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Oasis);
  • disabled Is Game In Progress == True;
  • }
  • actions
  • {
  • If(Current Map == Map(Oasis));
  • Global.C = Vector(82.508, 0.351, 39.703);
  • Global.SpawnPos = Vector(132.021, 3.200, 288.590);
  • Global.ArenaCenter = Vector(141, 0, 287);
  • Global.ArenaSize = 23;
  • Global.EscortGoal = Vector(198.833, 1.199, 201.504);
  • Global.CompatibilityMode = True;
  • Global.EnemySpawns = Empty Array;
  • Global.EnemySpawns[0] = Vector(125.149, 4.330, 291.204);
  • Global.EnemySpawns[1] = Vector(150.424, 8.284, 270.340);
  • Global.EnemySpawns[2] = Vector(128.009, 5.348, 273.396);
  • Global.EnemySpawns[3] = Vector(152.187, 5.452, 277.352);
  • Global.EnemySpawns[4] = Vector(119.997, 5.472, 289.027);
  • End;
  • }
  • }
  • rule("Initialize")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "Different maps can be added if proper spawn positions are provided and given their own map specific rules"
  • Disable Built-In Game Mode Completion;
  • Global.B = 1;
  • }
  • }
  • rule("Start")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • disabled Current Map == Map(Junkertown);
  • Global.ArenaSize > 0;
  • }
  • actions
  • {
  • "The defense hero spawned is dependent on difficulty. At difficulty 2 a support hero will be selected if none are present in the team of players"
  • disabled Global.C = Vector(82.508, 0.351, 39.703);
  • disabled Global.SpawnPos = Vector(-31.690, 6.168, -19.543);
  • Global.Spawned = Empty Array;
  • Skip If(Global.J != 1, 5);
  • If(Is True For Any(All Players(Team 2), Array Contains(All Support Heroes, Hero Of(Current Array Element)) == True) == True);
  • Create Dummy Bot(Random Value In Array(All Tank Heroes), Team 2, 5, Global.SpawnPos, Forward);
  • Else;
  • Create Dummy Bot(Random Value In Array(Append To Array(Append To Array(Empty Array, Hero(Mercy)), Hero(Zenyatta))), Team 2, 5,
  • Global.SpawnPos, Forward);
  • End;
  • Skip If(Global.J != 2, 4);
  • Skip If(First Of(Filtered Array(All Players(Team 2), Array Contains(All Support Heroes, Hero Of(Current Array Element)) == True))
  • == 0, 2);
  • Create Dummy Bot(Random Value In Array(Append To Array(All Damage Heroes, All Support Heroes)), Team 2, 5, Global.SpawnPos,
  • Forward);
  • Skip(1);
  • Create Dummy Bot(Random Value In Array(Append To Array(Append To Array(Empty Array, Hero(Mercy)), Hero(Zenyatta))), Team 2, 5,
  • Global.SpawnPos, Forward);
  • Skip If(Global.J != 3, 1);
  • Create Dummy Bot(Random Value In Array(Append To Array(Append To Array(Empty Array, Hero(D.Va)), Hero(Tracer))), Team 2, 5,
  • Global.SpawnPos, Forward);
  • Wait(0.100, Ignore Condition);
  • Skip If((Global.J != 3 || Hero Of(Players In Slot(5, Team 2)) != Hero(D.Va)) == True, 1);
  • Kill(Players In Slot(5, Team 2), Null);
  • If((Global.J == 1 && Array Contains(All Support Heroes, Hero Of(Players In Slot(5, Team 2))) == True) == True);
  • Players In Slot(5, Team 2).SpecialType = 1;
  • Wait(0.100, Ignore Condition);
  • Set Healing Dealt(Players In Slot(5, Team 2), 100);
  • End;
  • Set Damage Dealt(Players In Slot(5, Team 2), 0);
  • Set Damage Received(Players In Slot(5, Team 2), 35);
  • Set Healing Received(Players In Slot(5, Team 2), 35);
  • Set Objective Description(All Players(All Teams), Custom String("Protect {1} {0}", Hero Icon String(Hero Of(Players In Slot(5,
  • Team 2))), Hero Of(Players In Slot(5, Team 2))), Visible To and String);
  • Global.Enemies = Empty Array;
  • Create Effect(Filtered Array(All Players(All Teams), Global.SpecialRound != True), Light Shaft, Color(White), Global.ArenaCenter,
  • Global.ArenaSize, Visible To Position and Radius);
  • Create Icon(All Players(All Teams), Players In Slot(5, Team 2), Plus, Visible To and Position, Color(Green), True);
  • Players In Slot(5, Team 2).DefendIcon = Last Created Entity;
  • Global.A = 0;
  • Create HUD Text(All Players(All Teams), Custom String("{0}'s Health: {1}/{2}", String("{0} {1}", Hero Icon String(Hero Of(
  • Players In Slot(5, Team 2))), Players In Slot(5, Team 2)), Round To Integer(Health(Players In Slot(5, Team 2)), Up),
  • Round To Integer(Max Health(Players In Slot(5, Team 2)), Up)), Null, Null, Top, -1, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • }
  • }
  • rule("Start 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.F == 1;
  • Is Game In Progress == True;
  • Players In Slot(5, Team 2) == Event Player;
  • }
  • actions
  • {
  • Global.F = 2;
  • }
  • }
  • rule("Round Increase")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • disabled Current Map == Map(Junkertown);
  • Global.F == 2;
  • First Of(Global.Enemies) == 0;
  • Is True For All(All Players(Team 1), (Is Alive(Current Array Element) != True || Has Spawned(Current Array Element) != True)
  • == True) == True;
  • Players In Slot(5, Team 2) != Null;
  • Global.ArenaSize > 0;
  • }
  • actions
  • {
  • Wait(5, Abort When False);
  • Global.Type1 = Null;
  • Global.Type2 = Null;
  • Global.Type3 = Null;
  • Global.Type4 = Null;
  • Global.TempTroop = Null;
  • Global.TempTank = Null;
  • Global.TempMiniboss = Null;
  • Global.TempTank = Null;
  • If(Global.Round == 0);
  • Communicate(Players In Slot(5, Team 2), Incoming);
  • End;
  • Skip If(Global.Round < 1, 4);
  • Big Message(All Players(All Teams), Custom String(
  • "Round complete! You can switch heroes before the next round by pressing Interact"));
  • Global.CanSwap = True;
  • Wait(3, Ignore Condition);
  • Global.CanSwap = False;
  • Set Match Time(3599);
  • Global.Round += 1;
  • Skip If(Global.Round > (Global.FastMode != True ? Global.FinalRound : 10), 1);
  • Big Message(All Players(All Teams), String("Round {0}", Global.Round));
  • If((Random Integer(1, 2) == 1 || Global.Round > (Global.FastMode != True ? 15 : 5)) == True);
  • Global.MinibossRound = True;
  • Else;
  • Global.MinibossRound = False;
  • End;
  • If((Random Integer(1, 2) == 1 || Global.Round > (Global.FastMode != True ? 26 : 7)) == True);
  • Global.BossRound = True;
  • Else;
  • Global.BossRound = False;
  • End;
  • If(Random Integer(1, 2) == 1);
  • Global.ForceTroop = Random Value In Array(Global.TroopList);
  • Global.ForceTank = Random Value In Array(Global.TankList);
  • Global.ForceMiniboss = Random Value In Array(Global.MinibossList);
  • Global.ForceBoss = Random Value In Array(Global.BossList);
  • Else;
  • Global.ForceTroop = 0;
  • Global.ForceTank = 0;
  • Global.ForceMiniboss = 0;
  • Global.ForceBoss = 0;
  • End;
  • If(Random Integer(1, 2) == 1);
  • Global.ForceMod = Random Integer(0, Global.TypeUnlock);
  • Else;
  • Global.ForceMod = 0;
  • End;
  • Global.Troops = 0;
  • Global.Tanks = 0;
  • Global.Minibosses = 0;
  • Global.Bosses = 0;
  • Global.EnemyCount = 0;
  • If(Global.FastMode != True);
  • If(Global.Round <= Global.FinalRound);
  • Global.RoundPoints = Global.Round * (Global.Round == Global.FinalRound ? 15 : 3);
  • End;
  • Else;
  • If(Global.Round <= 10);
  • Global.RoundPoints = Global.Round * (Global.Round == 10 ? 25 : 7);
  • End;
  • End;
  • }
  • }
  • rule("Out of Bounds Force")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Vector(X Component Of(Global.ArenaCenter), Y Component Of(Position Of(Event Player)),
  • Z Component Of(Global.ArenaCenter))) > Global.ArenaSize;
  • disabled Current Map == Map(Junkertown);
  • Global.F == 2;
  • Global.SpecialRound != True;
  • Global.ArenaSize > 0;
  • }
  • actions
  • {
  • Wait(0.100, Abort When False);
  • Apply Impulse(Event Player, Direction Towards(Event Player, Vector(X Component Of(Global.ArenaCenter), Y Component Of(Position Of(
  • Event Player)) + 3, Z Component Of(Global.ArenaCenter))), 10, To World, Cancel Contrary Motion);
  • Wait(0.400, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Out of Bounds Teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Distance Between(Event Player, Vector(X Component Of(Global.ArenaCenter), Y Component Of(Position Of(Event Player)),
  • Z Component Of(Global.ArenaCenter))) > Global.ArenaSize;
  • disabled Current Map == Map(Junkertown);
  • Global.F == 2;
  • Global.SpecialRound != True;
  • Global.ArenaSize > 0;
  • }
  • actions
  • {
  • Wait(1, Abort When False);
  • Teleport(Event Player, Global.SpawnPos);
  • Set Status(Event Player, Null, Knocked Down, 2);
  • Set Status(Event Player, Null, Invincible, 2.500);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Event Player, 100);
  • Play Effect(All Players(All Teams), Good Explosion, Color(White), Event Player, 1);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Group Up Value")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Communicating(Event Player, Group Up) == True;
  • Event Player.Group != True;
  • }
  • actions
  • {
  • "The defense hero listens to the group up communication and changes their following priorities for a few seconds if someone says it"
  • Event Player.Group = True;
  • Wait(5, Ignore Condition);
  • Event Player.Group = False;
  • }
  • }
  • rule("Super Advanced Target Selection Slot 0")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Distance Between(Event Player, Players In Slot(0, Team 2)) < Distance Between(Event Player, Event Player.A);
  • Is Alive(Players In Slot(0, Team 2)) == True;
  • Has Spawned(Players In Slot(0, Team 2)) == True;
  • Event Player.A.Group != True;
  • Has Status(Players In Slot(0, Team 2), Phased Out) != True;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(0, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(0, Team 2);
  • }
  • }
  • rule("Super Advanced Target Selection Slot 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Distance Between(Event Player, Players In Slot(1, Team 2)) < Distance Between(Event Player, Event Player.A);
  • Is Alive(Players In Slot(1, Team 2)) == True;
  • Has Spawned(Players In Slot(1, Team 2)) == True;
  • Event Player.A.Group != True;
  • Has Status(Players In Slot(1, Team 2), Phased Out) != True;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(1, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(1, Team 2);
  • }
  • }
  • rule("Super Advanced Target Selection Slot 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Distance Between(Event Player, Players In Slot(2, Team 2)) < Distance Between(Event Player, Event Player.A);
  • Is Alive(Players In Slot(2, Team 2)) == True;
  • Has Spawned(Players In Slot(2, Team 2)) == True;
  • Event Player.A.Group != True;
  • Has Status(Players In Slot(2, Team 2), Phased Out) != True;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(2, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(2, Team 2);
  • }
  • }
  • rule("Super Advanced Target Selection Slot 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Distance Between(Event Player, Players In Slot(3, Team 2)) < Distance Between(Event Player, Event Player.A);
  • Is Alive(Players In Slot(3, Team 2)) == True;
  • Has Spawned(Players In Slot(3, Team 2)) == True;
  • Event Player.A.Group != True;
  • Has Status(Players In Slot(3, Team 2), Phased Out) != True;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(3, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(3, Team 2);
  • }
  • }
  • rule("Super Advanced Priority Target Selection Slot 0")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Is Alive(Players In Slot(0, Team 2)) == True;
  • (Distance Between(Event Player.A, Event Player) > Distance Between(Players In Slot(0, Team 2), Event Player) || (
  • Event Player.A.Group != True && Players In Slot(0, Team 2).Group == True) == True) == True;
  • Has Spawned(Players In Slot(0, Team 2)) == True;
  • Players In Slot(0, Team 2).Group == True;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(0, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(0, Team 2);
  • }
  • }
  • rule("Super Advanced Priority Target Selection Slot 1")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Is Alive(Players In Slot(1, Team 2)) == True;
  • Has Spawned(Players In Slot(1, Team 2)) == True;
  • (Distance Between(Event Player.A, Event Player) > Distance Between(Players In Slot(1, Team 2), Event Player) || (
  • Event Player.A.Group != True && Players In Slot(1, Team 2).Group == True) == True) == True;
  • Players In Slot(1, Team 2).Group == True;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(1, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(1, Team 2);
  • }
  • }
  • rule("Super Advanced Priority Target Selection Slot 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Is Alive(Players In Slot(2, Team 2)) == True;
  • Has Spawned(Players In Slot(2, Team 2)) == True;
  • (Distance Between(Event Player.A, Event Player) > Distance Between(Players In Slot(2, Team 2), Event Player) || (
  • Event Player.A.Group != True && Players In Slot(2, Team 2).Group == True) == True) == True;
  • Players In Slot(2, Team 2).Group == True;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(2, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(2, Team 2);
  • }
  • }
  • rule("Super Advanced Priority Target Selection Slot 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Is Alive(Players In Slot(3, Team 2)) == True;
  • Has Spawned(Players In Slot(3, Team 2)) == True;
  • (Distance Between(Event Player.A, Event Player) > Distance Between(Players In Slot(3, Team 2), Event Player) || (
  • Event Player.A.Group != True && Players In Slot(3, Team 2).Group == True) == True) == True;
  • Players In Slot(3, Team 2).Group == True;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(3, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(3, Team 2);
  • }
  • }
  • rule("Super Advanced Target Selection No Slot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player.A == Null;
  • Is Alive(Closest Player To(Event Player, Team Of(Event Player))) == True;
  • Has Spawned(Closest Player To(Event Player, Team Of(Event Player))) == True;
  • Has Status(Closest Player To(Event Player, Team Of(Event Player)), Phased Out) != True;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team Of(Event Player), Surfaces), Closest Player To(
  • Event Player, Team Of(Event Player))) == True;
  • }
  • actions
  • {
  • Event Player.A = Closest Player To(Event Player, Team Of(Event Player));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Super Advanced Pathing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Global.Cutscene == True;
  • Distance Between(Event Player, Event Player.A) > 2.500;
  • }
  • actions
  • {
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Event Player.A), 1, To World, Replace existing throttle,
  • Direction and Magnitude);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.A)), 750, To World,
  • Direction and Turn Rate);
  • Event Player.FriendlyAIState = 1;
  • }
  • }
  • rule("Super Advanced Pathing 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • (Distance Between(Event Player, Event Player.A) <= 2 || Event Player.FriendlyAIState != 1) == True;
  • }
  • actions
  • {
  • If((Event Player.Avoid != 0 && Is Alive(Event Player.Avoid) == True && Event Player.A != Null && Distance Between(Event Player,
  • Event Player.Avoid) < 1.250 + Distance Between(Event Player.Avoid, Event Player.A) && Global.Cutscene == True && True)
  • == True);
  • If(Event Player.FriendlyAIState != 2);
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Position Of(Event Player.A) + Direction Towards(Vector(
  • X Component Of(Position Of(Event Player.Avoid)), Y Component Of(Position Of(Event Player)), Z Component Of(Position Of(
  • Event Player.Avoid))), Event Player) * 3), 1, To World, Replace existing throttle, Direction and Magnitude);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.A)), 750, To World,
  • Direction and Turn Rate);
  • Event Player.FriendlyAIState = 2;
  • End;
  • Else;
  • If(Event Player.FriendlyAIState != 0);
  • Event Player.FriendlyAIState = 0;
  • If(Event Player.LastKnown != 0 && Is In Line of Sight(Eye Position(Event Player), Event Player.LastKnown,
  • Barriers Do Not Block LOS) == True && Event Player.A == Null && True);
  • Start Throttle In Direction(Event Player, Direction Towards(Event Player, Event Player.LastKnown), 1, To World,
  • Replace existing throttle, Direction and Magnitude);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Event Player.LastKnown), 750, To World,
  • Direction and Turn Rate);
  • Wait(0.100, Ignore Condition);
  • Wait Until(Event Player.FriendlyAIState != 0 || Distance Between(Event Player, Vector(X Component Of(Event Player.LastKnown),
  • Y Component Of(Position Of(Event Player)), Z Component Of(Event Player.LastKnown))) < 0.500 || False, 5);
  • If(Event Player.FriendlyAIState == 0);
  • Stop Throttle In Direction(Event Player);
  • Stop Facing(Event Player);
  • Event Player.LastKnown = 0;
  • End;
  • Else;
  • Stop Throttle In Direction(Event Player);
  • Stop Facing(Event Player);
  • End;
  • End;
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Super Advanced Pathing 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • Event Player.Avoid = First Of(Sorted Array(All Living Players(Team 1), Distance Between(Event Player, Current Array Element)));
  • Wait(Random Real(0.500, 1), Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Super Advanced Pathing 4")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • Event Player.LastKnown = Eye Position(Event Player.A);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Dummy Bot Message")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player.C == Null;
  • Event Player != Players In Slot(4, Team 2);
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team Of(Event Player), Surfaces), Event Player.A) != True;
  • }
  • actions
  • {
  • "The defense hero will say group up when their super advanced straight line pathfinding can't reach any players"
  • Event Player.A = Null;
  • Create Icon(All Players(All Teams), Event Player, Exclamation Mark, Visible To and Position, Color(Yellow), True);
  • Event Player.C = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Wait Until(Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team Of(Event Player), Surfaces), Event Player.A)
  • == True, 99999);
  • Destroy Icon(Event Player.C);
  • Event Player.C = Null;
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Dummy Bot Message 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player.C != Null;
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team Of(Event Player), Surfaces), Event Player.A) == True;
  • }
  • actions
  • {
  • Destroy Icon(Event Player.C);
  • Event Player.C = Null;
  • }
  • }
  • rule("Dummy Bot Message 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • Event Player.A == Null;
  • Global.Round > 0;
  • }
  • actions
  • {
  • "Sometimes they say hello instead of group up..."
  • Wait(Random Integer(7, 20), Abort When False);
  • Skip If(Random Integer(0, 1) == 0, 2);
  • Communicate(Event Player, Group Up);
  • Skip(1);
  • Communicate(Event Player, Hello);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Dummy Bot Message 4")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • Normalized Health(Event Player) < 0.750;
  • Is True For Any(All Players(Team 2), (Array Contains(All Support Heroes, Hero Of(Current Array Element)) == True && Is Dummy Bot(
  • Current Array Element) != True) == True) == True;
  • }
  • actions
  • {
  • "The defense hero will request healing if there's a healer on the team and they've been missing health for a while"
  • Wait(Random Integer(7, 15), Abort When False);
  • Communicate(Event Player, Need Healing);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Dummy Bot Message 5")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • Is Communicating(Event Player.A, Hello) == True;
  • Global.Round > 0;
  • }
  • actions
  • {
  • "The defense hero also says hello back!"
  • Wait(Random Real(0.750, 2), Ignore Condition);
  • Communicate(Event Player, Hello);
  • }
  • }
  • rule("Dummy Bot Message 6")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • (Hero Of(Event Player) == Hero(Mercy) || Hero Of(Event Player) == Hero(Moira) || Hero Of(Event Player) == Hero(Ana) || False)
  • == True;
  • Is Communicating(Event Player.A, Need Healing) == True;
  • Distance Between(Eye Position(Event Player), Event Player.A) < 10;
  • (Is True For Any(All Players(Team 2), (Array Contains(All Support Heroes, Hero Of(Current Array Element)) == True && Is Dummy Bot(
  • Current Array Element) != True) == True) == True || Hero Of(Event Player) != Hero(Mercy)) == True;
  • }
  • actions
  • {
  • "If the defense hero is a support you can request healing and they will attempt to heal you!"
  • Wait(Random Real(0.750, 2), Ignore Condition);
  • Communicate(Event Player, Acknowledge);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.A)), To World);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Event Player.ThanksTimer = True;
  • Wait(4, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(4, Ignore Condition);
  • Event Player.ThanksTimer = False;
  • }
  • }
  • rule("Dummy Bot Message 7")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • (Hero Of(Event Player) == Hero(Baptiste) || False || False) == True;
  • Is Communicating(Event Player.A, Need Healing) == True;
  • Distance Between(Eye Position(Event Player), Event Player.A) < 10;
  • }
  • actions
  • {
  • Wait(Random Real(0.750, 2), Ignore Condition);
  • Communicate(Event Player, Acknowledge);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.A)), To World);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Event Player.ThanksTimer = True;
  • Wait(4, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(4, Ignore Condition);
  • Event Player.ThanksTimer = False;
  • }
  • }
  • rule("Dummy Bot Message 8")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • (Hero Of(Event Player) == Hero(Zenyatta) || False || False) == True;
  • Is Communicating(Event Player.A, Need Healing) == True;
  • Distance Between(Eye Position(Event Player), Event Player.A) < 10;
  • (Is True For Any(All Players(Team 2), (Array Contains(All Support Heroes, Hero Of(Current Array Element)) == True && Is Dummy Bot(
  • Current Array Element) != True) == True) == True || Hero Of(Event Player) != Hero(Zenyatta)) == True;
  • }
  • actions
  • {
  • Wait(Random Real(0.750, 2), Ignore Condition);
  • Communicate(Event Player, Acknowledge);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Event Player.ThanksTimer = True;
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.A)), To World);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(8, Ignore Condition);
  • Event Player.ThanksTimer = False;
  • }
  • }
  • rule("Dummy Bot Message 9")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • (Hero Of(Event Player) == Hero(Brigitte) || Hero Of(Event Player) == Hero(Soldier: 76) || False) == True;
  • Is Communicating(Event Player.A, Need Healing) == True;
  • Distance Between(Eye Position(Event Player), Event Player.A) < 10;
  • }
  • actions
  • {
  • "You can even request healing from Soldier: 76 if he's the defense hero!"
  • Wait(Random Real(0.750, 2), Ignore Condition);
  • Communicate(Event Player, Acknowledge);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.A)), To World);
  • Wait(0.100, Ignore Condition);
  • Press Button(Event Player, Button(Ability 2));
  • Event Player.ThanksTimer = True;
  • Wait(8, Ignore Condition);
  • Event Player.ThanksTimer = False;
  • }
  • }
  • rule("Dummy Bot Message 10")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • (Hero Of(Event Player) == Hero(Lúcio) || False || False) == True;
  • Is Communicating(Event Player.A, Need Healing) == True;
  • Distance Between(Eye Position(Event Player), Event Player.A) < 10;
  • }
  • actions
  • {
  • Wait(Random Real(0.750, 2), Ignore Condition);
  • Communicate(Event Player, Acknowledge);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Event Player.ThanksTimer = True;
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.A)), To World);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(5, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(3, Ignore Condition);
  • Event Player.ThanksTimer = False;
  • }
  • }
  • rule("Dummy Bot Message 11")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • Is Button Held(Event Player.A, Button(Crouch)) == True;
  • }
  • actions
  • {
  • Wait(Random Real(0.250, 0.750), Abort When False);
  • Start Holding Button(Event Player, Button(Crouch));
  • }
  • }
  • rule("Dummy Bot Message 12")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • Is Button Held(Event Player.A, Button(Crouch)) != True;
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • }
  • actions
  • {
  • Wait(Random Real(0.250, 0.750), Abort When False);
  • Stop Holding Button(Event Player, Button(Crouch));
  • }
  • }
  • rule("Dummy Bot Message 13")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • Event Player.A == Null;
  • Normalized Health(Event Player) < 0.750;
  • }
  • actions
  • {
  • Communicate(Event Player, Need Help);
  • Wait(Random Integer(7, 10), Ignore Condition);
  • }
  • }
  • rule("Dummy Bot Message 14")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • Is Communicating(Event Player.A, Thanks) == True;
  • Event Player.ThanksTimer == True;
  • }
  • actions
  • {
  • Wait(Random Real(0.750, 2), Ignore Condition);
  • Communicate(Event Player, You are Welcome);
  • }
  • }
  • rule("Dummy Bot Message 15")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • (Hero Of(Event Player) == Hero(Mercy)) == True;
  • Event Player.A != Null;
  • Normalized Health(Event Player.A) < 0.950;
  • Distance Between(Eye Position(Event Player), Event Player.A) < 10;
  • Is True For Any(All Players(Team 2), (Array Contains(All Support Heroes, Hero Of(Current Array Element))
  • == True && Current Array Element != Event Player && True) == True) != True;
  • }
  • actions
  • {
  • "When no player picks a healer at normal difficulty the defense hero will try to act as the team's healer."
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.A)), To World);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Event Player.ThanksTimer = True;
  • Wait(4, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Event Player.ThanksTimer = False;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Dummy Bot Message 16")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • Event Player.A != Null;
  • Normalized Health(Event Player.A) < 0.950;
  • (Hero Of(Event Player) == Hero(Zenyatta)) == True;
  • Distance Between(Eye Position(Event Player), Event Player.A) < 10;
  • Is True For Any(All Players(Team 2), (Array Contains(All Support Heroes, Hero Of(Current Array Element))
  • == True && Current Array Element != Event Player && True) == True) != True;
  • }
  • actions
  • {
  • "The defense hero will only spawn as Zenyatta or Mercy when the team has no healer, since any other hero will slowly lose health to small damage and die with no healing to negate it."
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Eye Position(Event Player.A)), To World);
  • Wait(0.100, Ignore Condition);
  • Start Holding Button(Event Player, Button(Ability 1));
  • Event Player.ThanksTimer = True;
  • Wait(1, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Ability 1));
  • Event Player.ThanksTimer = False;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Dummy Bot Message 17")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 2;
  • Event Player != Players In Slot(4, Team 2);
  • (Is True For Any(All Players(Team 2), (Is Communicating(Current Array Element, Group Up) == True && Is Dummy Bot(
  • Current Array Element) != True && Current Array Element != Event Player.FloatBase && True) == True)
  • == True && Event Player.FloatBase != Null) == True;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Jump));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Jump));
  • }
  • }
  • disabled rule("Super Advanced Target Selection Slot 0 Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Is Alive(Players In Slot(0, Team 2)) == True;
  • Has Spawned(Players In Slot(0, Team 2)) == True;
  • Array Contains(Filtered Array(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Has Status(
  • Current Array Element, Phased Out) != True), Event Player.A) != True;
  • }
  • actions
  • {
  • Wait(0.500, Abort When False);
  • Event Player.A = Null;
  • }
  • }
  • disabled rule("Super Advanced Target Selection Slot 1 Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Is Alive(Players In Slot(1, Team 2)) == True;
  • Has Spawned(Players In Slot(1, Team 2)) == True;
  • Has Status(Players In Slot(1, Team 2), Phased Out) != True;
  • Distance Between(Event Player, Players In Slot(1, Team 2)) < Distance Between(Event Player, Event Player.A);
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(1, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(1, Team 2);
  • }
  • }
  • disabled rule("Super Advanced Target Selection Slot 5 Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Is Alive(Players In Slot(5, Team 2)) == True;
  • Has Spawned(Players In Slot(5, Team 2)) == True;
  • Has Status(Players In Slot(5, Team 2), Phased Out) != True;
  • Distance Between(Event Player, Players In Slot(5, Team 2)) < Distance Between(Event Player, Event Player.A);
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(5, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(5, Team 2);
  • }
  • }
  • disabled rule("Super Advanced Target Selection Slot 2 Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Is Alive(Players In Slot(2, Team 2)) == True;
  • Has Spawned(Players In Slot(2, Team 2)) == True;
  • Has Status(Players In Slot(2, Team 2), Phased Out) != True;
  • Distance Between(Event Player, Players In Slot(2, Team 2)) < Distance Between(Event Player, Event Player.A);
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(2, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(2, Team 2);
  • }
  • }
  • disabled rule("Super Advanced Target Selection Slot 3 Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Is Alive(Players In Slot(3, Team 2)) == True;
  • Has Spawned(Players In Slot(3, Team 2)) == True;
  • Has Status(Players In Slot(3, Team 2), Phased Out) != True;
  • Distance Between(Event Player, Players In Slot(3, Team 2)) < Distance Between(Event Player, Event Player.A);
  • Array Contains(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Players In Slot(3, Team 2)) == True;
  • }
  • actions
  • {
  • Event Player.A = Players In Slot(3, Team 2);
  • }
  • }
  • rule("Super Advanced Target Selection No Slot Enemy")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A == Null;
  • }
  • actions
  • {
  • If(Event Player.Healer < 1);
  • Event Player.A = Random Value In Array(Filtered Array(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), (
  • Is Alive(Current Array Element) == True && Has Spawned(Current Array Element) == True && Has Status(Current Array Element,
  • Phased Out) != True && True) == True));
  • Else If(Event Player.Healer < 2);
  • Event Player.A = Random Value In Array(Filtered Array(Players Within Radius(Eye Position(Event Player), 50, All Teams, Surfaces),
  • ((Team Of(Current Array Element) == Team 2 && Has Status(Current Array Element, Phased Out)
  • != True && Current Array Element.Down != True && Is Alive(Current Array Element) == True && Has Spawned(Current Array Element)
  • == True && True) || (Team Of(Current Array Element) == Team 1 && Normalized Health(Current Array Element) < 0.950 && Is Alive(
  • Current Array Element) == True && Current Array Element != Event Player && True)) == True));
  • Else;
  • Event Player.A = Random Value In Array(Filtered Array(Players Within Radius(Eye Position(Event Player), 50, Team 1, Surfaces), (
  • False || (Team Of(Current Array Element) == Team 1 && True && Is Alive(Current Array Element)
  • == True && Current Array Element != Event Player && True)) == True));
  • End;
  • Wait(Random Real(0.750, 1.250), Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Super Advanced Pathing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • disabled Distance Between(Event Player, Event Player.A) > Event Player.Range + 0.500;
  • }
  • actions
  • {
  • If(Global.Round > 0 && Hero Of(Event Player) != Hero(Mercy));
  • Start Throttle In Direction(Event Player, Direction From Angles(Horizontal Angle From Direction(Direction Towards(Eye Position(
  • Event Player), Event Player.A)) + Event Player.Dodge, Vertical Angle From Direction(Direction Towards(Eye Position(
  • Event Player), Event Player.A))), Event Player.A != Null ? Event Player.DodgeSpeed : 0, To World, Replace existing throttle,
  • Direction and Magnitude);
  • Else;
  • Start Throttle In Direction(Event Player, Direction From Angles(Horizontal Angle From Direction(Direction Towards(Eye Position(
  • Event Player), Event Player.A)) + 0, Vertical Angle From Direction(Direction Towards(Eye Position(Event Player),
  • Event Player.A))), Distance Between(Event Player, Event Player.A) < Event Player.Range ? 0 : 1, To World,
  • Replace existing throttle, Direction and Magnitude);
  • End;
  • Start Facing(Event Player, Direction From Angles(Event Player.MissX + Horizontal Angle From Direction(Direction Towards(
  • Eye Position(Event Player), Position Of(Event Player.A) + Vector(0, Distance Between(Position Of(Event Player.A), Eye Position(
  • Event Player.A)) * 0.500, 0))), Event Player.MissY + Vertical Angle From Direction(Direction Towards(Eye Position(
  • Event Player), Position Of(Event Player.A) + Vector(0, Distance Between(Position Of(Event Player.A), Eye Position(
  • Event Player.A)) * 0.500, 0)))), Event Player.A != Null ? 350 : 0, To World, Direction and Turn Rate);
  • }
  • }
  • disabled rule("Super Advanced Pathing 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • Distance Between(Event Player, Event Player.A) <= Event Player.Range;
  • }
  • actions
  • {
  • Stop Throttle In Direction(Event Player);
  • disabled Start Facing(Event Player, Direction Towards(Event Player, Position Of(Event Player.A) + Vector(0, -0.250, 0)), 350, To World,
  • Direction and Turn Rate);
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), Position Of(Event Player.A) + Vector(0, Distance Between(
  • Eye Position(Event Player.A), Position Of(Event Player.A)) * 0.500, 0)), 350, To World, Direction and Turn Rate);
  • }
  • }
  • disabled rule("Super Advanced Pathing 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A == Null;
  • }
  • actions
  • {
  • Start Facing(Event Player, Closest Player To(Eye Position(Event Player), Team 2), 350, To World, Direction and Turn Rate);
  • }
  • }
  • rule("No Poking at Corners")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Attacker) == Team 2;
  • disabled Event Player.A == Null;
  • disabled Is Alive(Attacker) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Attacker) == Team 2);
  • If((Event Player.A == Null || (Attacker.SpecialType == 1 && Event Player.A.SpecialType != 1 && Distance Between(Event Player,
  • Attacker) < 12) || (Distance Between(Event Player.A, Event Player) > Distance Between(Event Player, Attacker) && (
  • Random Integer(1, 7) == 1 || Attacker.SpecialType == 1 || Event Damage) > Max Health(Event Player) * 0.333)) == True);
  • If(Is Alive(Attacker) == True);
  • "The enemies will try to attack you even if they can't see you if you attack them"
  • Event Player.A = Attacker;
  • Wait(Random Real(1, 2), Ignore Condition);
  • Skip If(Array Contains(Filtered Array(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Is Alive(
  • Current Array Element) == True), Event Player.A) == True, 1);
  • Event Player.A = Null;
  • End;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Enemy Bot Lose Target")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • disabled Array Contains(Filtered Array(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Has Status(
  • Current Array Element, Phased Out) != True), Event Player.A) != True;
  • }
  • actions
  • {
  • Wait(0.900, Ignore Condition);
  • If(Event Player.Healer < 1);
  • If(Array Contains(Filtered Array(Players Within Radius(Eye Position(Event Player), 50, Team 2, Surfaces), Has Status(
  • Current Array Element, Phased Out) != True), Event Player.A) != True);
  • disabled Wait(0.500, Abort When False);
  • Event Player.A = Null;
  • disabled Stop Throttle In Direction(Event Player);
  • End;
  • Else;
  • If(Array Contains(Filtered Array(Players Within Radius(Eye Position(Event Player), 50, All Teams, Surfaces), Has Status(
  • Current Array Element, Phased Out) != True), Event Player.A) != True);
  • Event Player.A = Null;
  • End;
  • End;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Enemy Idle Wandering")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A == Null;
  • Is Alive(Event Player) == True;
  • Event Player.Teleporting != True;
  • }
  • actions
  • {
  • Wait(Random Real(0.250, 0.500), Abort When False);
  • Stop Throttle In Direction(Event Player);
  • Wait(Random Real(0.500, 1), Abort When False);
  • Start Throttle In Direction(Event Player, Direction Towards(Vector(0, 0, 0), Vector(Random Real(-10, 10), 1, Random Real(-10,
  • 10))), 1, To World, Replace existing throttle, None);
  • Wait(Random Real(2, 5), Abort When False);
  • Wait(0.500, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Bot Lose Target")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.A != Null;
  • (Is Alive(Event Player.A) != True || Event Player.A.Down == True || Has Status(Event Player, Stunned) == True || Has Status(
  • Event Player, Knocked Down) == True || Has Status(Event Player, Frozen) == True || Has Status(Event Player, Asleep)
  • == True || (Team Of(Event Player.A) == Team Of(Event Player) && Normalized Health(Event Player.A)
  • > 0.950 && Event Player.Healer == 1) || False) == True;
  • }
  • actions
  • {
  • Event Player.A = Null;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Healer Auto Retarget")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.A != Null;
  • Event Player.Healer > 0;
  • }
  • actions
  • {
  • Wait(3, Abort When False);
  • Event Player.A = Null;
  • Loop If Condition Is True;
  • }
  • }
  • rule("Respawns")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Disable Built-In Game Mode Respawning(Event Player);
  • Event Player.Z = 1;
  • }
  • }
  • rule("Escort Bot Died")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Is Alive(Event Player) == False;
  • Team Of(Event Player) == Team 2;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • "The game ends if the defense hero dies, so try to avoid that!"
  • Set Slow Motion(50);
  • Global.OldCam = Event Player;
  • Big Message(All Players(All Teams), Custom String("{0} {1} has died!", Event Player, Hero Icon String(Hero Of(Event Player))));
  • If(Is True For Any(All Players(Team 2), (Hero Of(Current Array Element) == Hero(Mercy) && Is Dummy Bot(Current Array Element)
  • != True) == True) == True);
  • Wait(2, Ignore Condition);
  • End;
  • If(Is True For Any(All Players(Team 2), (Hero Of(Current Array Element) == Hero(Mercy) && Is Using Ability 2(Current Array Element)
  • == True) == True) == True);
  • Loop;
  • End;
  • If(Is Alive(Event Player) != True);
  • Wait(1, Ignore Condition);
  • If(Global.MissionComplete != True);
  • Declare Team Victory(Team 1);
  • Else;
  • If(Global.FastMode != True);
  • Declare Team Victory(Team 2);
  • Else;
  • Declare Team Victory(Team 1);
  • End;
  • Create Dummy Bot(Global.LastHero, Team 2, 4, Vector(0, 1000, 0), Vector(0, 0, 0));
  • End;
  • Else;
  • Big Message(All Players(All Teams), Custom String("{0} {1} was revived!", Event Player, Hero Icon String(Hero Of(Event Player))));
  • Set Slow Motion(100);
  • Global.OldCam = Null;
  • Stop Camera(All Players(All Teams));
  • End;
  • Loop If Condition Is True;
  • }
  • }
  • rule("Camera")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) != True;
  • Global.OldCam != Null;
  • }
  • actions
  • {
  • "Global variable D activates a camera that looks at the player in the variable. It makes the defeat screen more dramatic!"
  • Start Camera(Event Player, Eye Position(Global.OldCam) + Vector(0, 1, 2), Global.OldCam, 20);
  • }
  • }
  • rule("Time")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == True;
  • }
  • actions
  • {
  • "The normal hero assembly time is a little long for this mode, so this shortens it"
  • Set Match Time(10);
  • }
  • }
  • rule("Time 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Assembling Heroes == False;
  • }
  • actions
  • {
  • "This sets the time in the spawn room before the actual game starts. If nobody changes anything it defaults to difficulty 2"
  • Set Match Time(30);
  • }
  • }
  • rule("Intro Cutscene")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.ArenaSize > 0;
  • }
  • actions
  • {
  • "Gamemode originally created by Squ1dward #1665"
  • Disable Built-In Game Mode Announcer;
  • Set Match Time(3599);
  • Wait(1.100, Ignore Condition);
  • Big Message(All Players(All Teams), String("No"));
  • Create Dummy Bot(Hero(Reaper), Team 1, 0, Vector(X Component Of(Global.SpawnPos) + 1.500, Y Component Of(Global.SpawnPos) + 2.500,
  • Z Component Of(Global.SpawnPos) + -10.500), Vector(0, 0, 0));
  • Wait(0.100, Ignore Condition);
  • Players In Slot(0, Team 1).Range = 1.500;
  • Set Primary Fire Enabled(Players In Slot(0, Team 1), False);
  • Set Facing(Players In Slot(5, Team 2), Direction Towards(Eye Position(Players In Slot(5, Team 2)), Eye Position(Players In Slot(0,
  • Team 1))), To World);
  • Disable Game Mode HUD(All Players(Team 2));
  • Disable Hero HUD(All Players(Team 2));
  • Global.Camera = Eye Position(Players In Slot(0, Team 1));
  • Global.CameraLook = Eye Position(Players In Slot(5, Team 2));
  • Chase Global Variable At Rate(CameraLook, Eye Position(Players In Slot(0, Team 1)), 100, Destination and Rate);
  • Chase Global Variable At Rate(Camera, Ray Cast Hit Position(Eye Position(Players In Slot(5, Team 2)), World Vector Of(Vector(1,
  • 1.250, -2), Players In Slot(5, Team 2), Rotation And Translation), Empty Array, Empty Array, False), 100,
  • Destination and Rate);
  • Wait(4, Ignore Condition);
  • Communicate(Players In Slot(5, Team 2), Hello);
  • Wait(2, Ignore Condition);
  • If(Global.J != 3);
  • Press Button(Players In Slot(0, Team 1), Button(Melee));
  • Else;
  • Set Primary Fire Enabled(Players In Slot(0, Team 1), True);
  • Set Status(Players In Slot(5, Team 2), Null, Invincible, 1);
  • Wait(0.016, Ignore Condition);
  • Press Button(Players In Slot(0, Team 1), Button(Primary Fire));
  • Wait(0.016, Ignore Condition);
  • Set Primary Fire Enabled(Players In Slot(0, Team 1), False);
  • Set Player Health(Players In Slot(5, Team 2), Random Integer(7, 15));
  • End;
  • disabled Set Slow Motion(5);
  • Wait(0.250, Ignore Condition);
  • Set Status(Players In Slot(5, Team 2), Null, Knocked Down, 18);
  • Global.Story = Random Integer(0, 3);
  • If(Global.Story == 0);
  • disabled Wait(4, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String("{0} {1} has stolen Talon's secret plans!", Players In Slot(5, Team 2),
  • Hero Icon String(Hero Of(Players In Slot(5, Team 2)))));
  • Wait(4, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String("Talon has sent an army of hero clones to get the plans back", Players In Slot(5,
  • Team 2), Hero Icon String(Hero Of(Players In Slot(5, Team 2)))));
  • Else If(Global.Story == 1);
  • disabled Wait(4, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String("{0} {1} has discovered important information about Null Sector!",
  • Players In Slot(5, Team 2), Hero Icon String(Hero Of(Players In Slot(5, Team 2)))));
  • Wait(4, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String(
  • "Null Sector has sent an army of omnic versions of heroes to keep {0} {1} from telling others", Players In Slot(5, Team 2),
  • Hero Icon String(Hero Of(Players In Slot(5, Team 2)))));
  • Else If(Global.Story == 2);
  • disabled Wait(4, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String("Sombra has hacked the minds of several heroes!", Players In Slot(5, Team 2),
  • Hero Icon String(Hero Of(Players In Slot(5, Team 2)))));
  • Wait(4, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String("Now they're attacking {0} {1}", Players In Slot(5, Team 2), Hero Icon String(
  • Hero Of(Players In Slot(5, Team 2)))));
  • Else If(Global.Story == 3);
  • disabled Wait(4, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String("{0} {1} has stolen Winston's peanut butter!", Players In Slot(5, Team 2),
  • Hero Icon String(Hero Of(Players In Slot(5, Team 2)))));
  • Wait(4, Ignore Condition);
  • Big Message(All Players(All Teams), Custom String(
  • "Winston has assembled an army of heroes to do whatever is necessary to get his peanut butter back", Players In Slot(5,
  • Team 2), Hero Icon String(Hero Of(Players In Slot(5, Team 2)))));
  • End;
  • disabled Set Slow Motion(100);
  • Wait(1, Ignore Condition);
  • Communicate(Players In Slot(5, Team 2), Need Help);
  • Wait(2, Ignore Condition);
  • Global.SceneTarg = Random Value In Array(Filtered Array(All Players(Team 2), (Is Alive(Current Array Element)
  • == True && Has Spawned(Current Array Element) == True && Is Dummy Bot(Current Array Element) != True && True) == True));
  • Teleport(Global.SceneTarg, Eye Position(Players In Slot(0, Team 1)) + Vector(0, 3, 0));
  • Apply Impulse(Global.SceneTarg, Forward, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.SceneTarg, Up, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.SceneTarg, Left, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.SceneTarg, Backward, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.SceneTarg, Right, 0.001, To World, Cancel Contrary Motion);
  • Apply Impulse(Global.SceneTarg, Down, 0.001, To World, Cancel Contrary Motion);
  • Set Status(Global.SceneTarg, Null, Rooted, 11);
  • Wait(0.500, Ignore Condition);
  • Set Status(Players In Slot(0, Team 1), Null, Knocked Down, 9999);
  • Start Facing(Global.SceneTarg, Direction Towards(Eye Position(Global.SceneTarg), Eye Position(Players In Slot(5, Team 2))), 300,
  • To World, Direction and Turn Rate);
  • Disallow Button(Global.SceneTarg, Button(Primary Fire));
  • Disallow Button(Global.SceneTarg, Button(Secondary Fire));
  • Disallow Button(Global.SceneTarg, Button(Ability 1));
  • Disallow Button(Global.SceneTarg, Button(Ability 2));
  • Disallow Button(Global.SceneTarg, Button(Ultimate));
  • Disallow Button(Global.SceneTarg, Button(Melee));
  • Cancel Primary Action(Global.SceneTarg);
  • Wait(2, Ignore Condition);
  • Communicate(Global.SceneTarg, Hello);
  • Wait(2, Ignore Condition);
  • Communicate(Players In Slot(5, Team 2), Thanks);
  • Wait(2, Ignore Condition);
  • Teleport(Filtered Array(All Players(Team 2), (Is Alive(Current Array Element) == True && Has Spawned(Current Array Element)
  • == True && Is Dummy Bot(Current Array Element) != True && Global.SceneTarg != Current Array Element && True) == True),
  • Eye Position(Players In Slot(0, Team 1)) + Vector(0, 3, 0));
  • Stop Chasing Global Variable(CameraLook);
  • Wait(0.500, Ignore Condition);
  • Damage(Players In Slot(0, Team 1), Random Value In Array(Filtered Array(All Players(Team 2), (Is Alive(Current Array Element)
  • == True && Has Spawned(Current Array Element) == True && Is Dummy Bot(Current Array Element) != True && True) == True)),
  • 100000);
  • Apply Impulse(Players In Slot(0, Team 1), Down, 1, To World, Cancel Contrary Motion);
  • Stop Facing(Global.SceneTarg);
  • Allow Button(Global.SceneTarg, Button(Primary Fire));
  • Allow Button(Global.SceneTarg, Button(Secondary Fire));
  • Allow Button(Global.SceneTarg, Button(Ability 2));
  • Allow Button(Global.SceneTarg, Button(Ability 1));
  • Allow Button(Global.SceneTarg, Button(Ultimate));
  • Allow Button(Global.SceneTarg, Button(Melee));
  • Wait(4, Ignore Condition);
  • Stop Chasing Global Variable(Camera);
  • Global.Camera = Null;
  • Global.CameraLook = Null;
  • Enable Game Mode HUD(All Players(Team 2));
  • Enable Hero HUD(All Players(Team 2));
  • Big Message(All Players(All Teams), String("{0} {1} {2}", String("Protect"), Players In Slot(5, Team 2), Hero Icon String(Hero Of(
  • Players In Slot(5, Team 2)))));
  • Global.F = 1;
  • Global.Cutscene = True;
  • }
  • }
  • rule("Ignore Objective Message")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is On Objective(Event Player) == True;
  • }
  • actions
  • {
  • "There's no payload in this mode the goal is to protect the defense hero"
  • Big Message(Event Player, String("{0}, {1}", String("{0} {1} {2}", String("No"), String("Objective"), String("Here")), String(
  • "{0} {1} {2}", String("Escort"), Players In Slot(5, Team 2), Hero Icon String(Hero Of(Players In Slot(5, Team 2))))));
  • Wait(3, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Revive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Event Player.Down == True;
  • Event Player.DownTimer > 0;
  • Last Of(Filtered Array(Players Within Radius(Event Player, 3, Team 2, Surfaces), Current Array Element.Down != True)) != 0;
  • }
  • actions
  • {
  • "You can revive a teammate by standing where they died for a few seconds. It takes longer with each death"
  • Skip If(Event Player.H == Null, 1);
  • Destroy Effect(Event Player.H);
  • Skip If(Event Player.I == Null, 1);
  • Destroy Effect(Event Player.I);
  • Wait(0.100, Abort When False);
  • Create Effect(All Players(All Teams), Sparkles, Color(Yellow), Event Player, 3, Visible To Position and Radius);
  • Event Player.H = Last Created Entity;
  • Create Effect(All Players(All Teams), Good Aura Sound, Color(White), Event Player, 10000, Visible To Position and Radius);
  • Event Player.I = Last Created Entity;
  • Big Message(Filtered Array(Players Within Radius(Event Player, 3, Team 2, Surfaces), Is Alive(Current Array Element) == True),
  • String("{0}: {1}", String("{0} {1} {2}", Custom String("Reviving"), Event Player, Hero Icon String(Hero Of(Event Player))),
  • String("{0} sec", 3 * Event Player.Z)));
  • Event Player.ReviveLocation = Position Of(Event Player);
  • Wait(Event Player.Z * 3, Abort When False);
  • disabled Respawn(Event Player);
  • disabled Set Status(Event Player, Null, Phased Out, 2);
  • Event Player.Z += 1;
  • Play Effect(All Players(All Teams), Good Explosion, Color(Yellow), Event Player, 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(Yellow), Event Player, 1000);
  • Destroy Effect(Event Player.G);
  • Destroy Effect(Event Player.H);
  • Destroy Effect(Event Player.I);
  • Event Player.Down = False;
  • Resurrect(Event Player);
  • Wait(0.100, Ignore Condition);
  • Event Player.G = Null;
  • Event Player.H = Null;
  • Event Player.I = Null;
  • disabled Wait(1, Ignore Condition);
  • disabled Teleport(Event Player, Event Player.ReviveLocation);
  • }
  • }
  • rule("Super Smart Bastion AI Initialize - Set Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.AltForm == True);
  • Event Player.Range = 30;
  • Event Player.MissBase = 0.250;
  • Event Player.Miss = 0.100;
  • Else If(Event Player.UltForm == True);
  • Event Player.Range = 15;
  • Event Player.MissBase = 0.100;
  • Event Player.Miss = 0.050;
  • Else;
  • "This is all the super smart enemy AI stuff. Mostly it just tells the enemies when to shoot"
  • Event Player.Range = 2;
  • Event Player.MissBase = 1;
  • Event Player.Miss = 0.200;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Bastion AI - Press the Sentry Button")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Is In Alternate Form(Event Player) != True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If((Event Player.AltForm == True && Is Using Ultimate(Event Player) != True) == True);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Else;
  • Press Button(Event Player, Button(Ability 1));
  • End;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Bastion AI 2 - Shoot when there's stuff to shoot at")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Event Player.UltForm == True ? 0.100 : Random Real(0.250, 0.750), Ignore Condition);
  • If(Event Player.AltForm == True);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(1, Ignore Condition);
  • Else;
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(5, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.500, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • disabled rule("Super Smart Bastion AI 3 - Stop shooting when there's not")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A == Null;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • disabled rule("Super Smart Bastion AI 4 - Use self repair")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A == Null;
  • Normalized Health(Event Player) < 1;
  • }
  • actions
  • {
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • disabled rule("Super Smart Bastion AI 5 - Stop repairing at full health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Bastion;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A == Null;
  • Normalized Health(Event Player) >= 1;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • }
  • }
  • rule("Super Smart Reaper AI Initialize - Shotgun range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reaper;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 2.500;
  • Event Player.MissBase = 0.250;
  • Event Player.Miss = 0.300;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Reaper AI 2 - Shoot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reaper;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(0.500, Ignore Condition);
  • If((Distance Between(Event Player, Event Player.A) > 7 && Event Player.AltForm == True) == True);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • Wait Until(Is Using Ability 1(Event Player) != True, 5);
  • End;
  • If((Distance Between(Event Player, Event Player.A) < 4 && Event Player.UltForm == True) == True);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(5, Ignore Condition);
  • End;
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(1.050, Ignore Condition);
  • If((True && Event Player.AltForm == True) == True);
  • Wait(1, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Widow AI Initialize - Extreme range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 45;
  • Event Player.MissBase = 0;
  • Event Player.Miss = 0;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Widow AI - Click heads")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Widowmaker;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.100, 0.250), Ignore Condition);
  • If(Event Player.AltForm == True);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(1.250, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • If(Random Integer(0, 10) == 1);
  • Press Button(Event Player, Button(Ability 2));
  • End;
  • Else;
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(2, Ignore Condition);
  • disabled Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Position Of(Event Player.A) + Vector(0, 0.250, 0)),
  • To World);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • If(Event Player.UltForm != True);
  • Wait(0.500, Ignore Condition);
  • Else If(Distance Between(Event Player, Event Player.A) < 20);
  • If((Event Player.UltForm == True && Random Integer(0, 1) == 0) == True);
  • Event Player.Healer = 2;
  • Event Player.A = Null;
  • Wait Until(Event Player.A != Null, 1);
  • If(Team Of(Event Player.A) == Team Of(Event Player));
  • Wait(0.400, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • End;
  • Event Player.Healer = 0;
  • Event Player.A = Null;
  • Wait Until(Event Player.A != Null, 1);
  • End;
  • Wait(1, Ignore Condition);
  • End;
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Roadhog AI Initialize - Shotgun Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Roadhog;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(0.250, Ignore Condition);
  • Set Ammo(Event Player, 0, 1);
  • Set Max Ammo(Event Player, 0, 1);
  • Event Player.MissBase = 0.500;
  • Event Player.Miss = 0.200;
  • If(Event Player.AltForm == True);
  • Event Player.Range = 15;
  • Else;
  • Event Player.Range = 2.500;
  • End;
  • End;
  • End;
  • }
  • }
  • disabled rule("Super Smart Roadhog AI - Use Take a Breather when missing some health")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Roadhog;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Normalized Health(Event Player) < 0.750;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Super Smart Roadhog AI 2 - Shoot at stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Roadhog;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • (Event Player.A != Null || Event Player.AltForm == True) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • disabled Wait(Random Real(0.250, 0.750), Ignore Condition);
  • Wait(0.100, Ignore Condition);
  • Wait Until(Is Using Ability 1(Event Player) != True && Is Reloading(Event Player) != True && Ammo(Event Player, 0) > 0, 5);
  • Wait(0.100, Ignore Condition);
  • If(Event Player.A != Null);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Else If((Event Player.AltForm == True && Normalized Health(Event Player) < 0.950) == True);
  • Press Button(Event Player, Button(Ability 2));
  • End;
  • Wait(0.100, Ignore Condition);
  • disabled Set Ammo(Event Player, 0, 0);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Roadhog AI 4 - Hook stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Roadhog;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Distance Between(Event Player, Event Player.A) > 5;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Roadhog AI 5 - Knockback")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Roadhog;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Distance Between(Event Player, Victim) < 7;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If((Event Ability == Button(Primary Fire) || Event Ability == Button(Secondary Fire)) == True);
  • Apply Impulse(Victim, Direction Towards(Position Of(Event Player), Position Of(Victim) + Vector(0, 0.500, 0)),
  • Victim.StrongBuff != True ? 30 : 5, To World, Cancel Contrary Motion);
  • Set Status(Victim, Event Player, Knocked Down, Victim.StrongBuff != True ? 1.500 : 0.250);
  • Set Facing(Victim, Direction Towards(Eye Position(Victim), Eye Position(Event Player)), To World);
  • End;
  • End;
  • End;
  • }
  • }
  • disabled rule("Super Smart Roadhog AI 5 - No booping the boss off the map")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • disabled Y Component Of(Nearest Walkable Position(Event Player)) - Y Component Of(Position Of(Event Player)) > 5;
  • disabled Array Contains(All Tank Heroes, Hero Of(Event Player)) == True;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Up, 40, To World, Cancel Contrary Motion);
  • }
  • }
  • rule("Super Smart Soldier AI Initialize - Medium Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Soldier: 76;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 20;
  • Event Player.MissBase = 1.250;
  • Event Player.Miss = 0.300;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Soldier AI 2 - Shoot Stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Soldier: 76;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • If((Event Player.AltForm != True && Event Player.UltForm != True) == True);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(Random Real(0.500, 3), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Else If(Event Player.UltForm == True);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(Random Real(0.200, 0.500), Ignore Condition);
  • While(Random Integer(0, 4) > 0);
  • Press Button(Event Player, Button(Secondary Fire));
  • Wait(Random Real(0.250, 0.800), Ignore Condition);
  • End;
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(2, Ignore Condition);
  • Else;
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(2, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Junkrat AI Initialize - Explodey range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Junkrat;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 20;
  • Event Player.MissBase = 5;
  • Event Player.Miss = 0.500;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Junkrat AI 2 - Make stuff explode")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Junkrat;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.UltForm == True);
  • If(Distance Between(Event Player, Event Player.A) < 15);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.100, Ignore Condition);
  • Press Button(Event Player, Button(Secondary Fire));
  • Wait(0.750, Ignore Condition);
  • Else;
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.500, Ignore Condition);
  • End;
  • Else;
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(1.600, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • If(Event Player.AltForm == True);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.100, Ignore Condition);
  • Press Button(Event Player, Button(Secondary Fire));
  • End;
  • Wait(1.500, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • disabled rule("Super Smart Junkrat AI 5 - Roll face across keyboard when someone gets close")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Junkrat;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • Distance Between(Event Player, Event Player.A) < 5;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • Press Button(Event Player, Button(Ability 2));
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Secondary Fire));
  • Loop If Condition Is True;
  • }
  • }
  • rule("Super Smart Reinhardt AI Initialize - Hammer Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.AltForm == True);
  • Event Player.Range = 2;
  • Event Player.MissBase = 1.250;
  • Event Player.Miss = 0.300;
  • Else;
  • Event Player.Range = 2;
  • Event Player.MissBase = 0.500;
  • Event Player.Miss = 0.700;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Reinhardt AI 2 - Swing at stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • disabled If(Event Player.AltForm != True);
  • If(Is Firing Secondary(Event Player) != True);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • Wait(Random Real(0.250, 0.600), Ignore Condition);
  • If(Distance Between(Event Player, Event Player.A) < 5);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.100, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(2, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Else If((Ability Cooldown(Event Player, Button(Ability 2)) < 1 && Event Player.AltForm == True) == True);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.300, Ignore Condition);
  • Start Holding Button(Event Player, Button(Ability 2));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Ability 2));
  • Wait(0.300, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • Wait(1, Ignore Condition);
  • disabled Else;
  • disabled Wait(Random Real(0.500, 1), Ignore Condition);
  • disabled If(Distance Between(Event Player, Event Player.A) < 10);
  • disabled Start Holding Button(Event Player, Button(Primary Fire));
  • disabled Wait(4, Ignore Condition);
  • disabled Stop Holding Button(Event Player, Button(Primary Fire));
  • disabled Else;
  • disabled Start Holding Button(Event Player, Button(Secondary Fire));
  • disabled Wait(2, Ignore Condition);
  • disabled Stop Holding Button(Event Player, Button(Secondary Fire));
  • disabled End;
  • disabled End;
  • Loop If Condition Is True;
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Reinhardt AI 4 - Charge!")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Distance Between(Event Player, Event Player.A) > 10;
  • Is Using Ability 1(Event Player) != True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • disabled Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Event Player.A), To World);
  • Wait(Random Real(0.500, 0.750), Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • disabled rule("Super Smart Reinhardt AI 5 - No booping the boss off the map")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • disabled Y Component Of(Nearest Walkable Position(Event Player)) - Y Component Of(Position Of(Event Player)) > 5;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Apply Impulse(Event Player, Up, 40, To World, Cancel Contrary Motion);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Reinhardt AI 6 - Knockback")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Reinhardt;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Apply Impulse(Victim, Direction Towards(Event Player, Position Of(Victim) + Vector(0, 1, 0)), Victim.StrongBuff != True ? 25 : 5,
  • To World, Cancel Contrary Motion);
  • Set Facing(Victim, Direction Towards(Eye Position(Victim), Eye Position(Event Player)), To World);
  • Set Status(Victim, Event Player, Knocked Down, Victim.StrongBuff != True ? 1.500 : 0.250);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Sym AI Initialize - Orb Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Symmetra;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 20;
  • Event Player.MissBase = 1;
  • Event Player.Miss = 0.275;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Sym AI 2 - Hold Orb Button")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Symmetra;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.100, 0.250), Ignore Condition);
  • If(Event Player.UltForm != True);
  • If(Event Player.AltForm == True);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.300, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.500, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.300, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.500, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.300, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.750, Ignore Condition);
  • Else;
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(1.750, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.500, Ignore Condition);
  • End;
  • Else;
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(1, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(2, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Mei AI Initialize - Freezey Thing Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mei;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 2;
  • Event Player.MissBase = 1.250;
  • Event Player.Miss = 0.300;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Mei AI 2 - Hold Beam Button")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mei;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • Is Using Ability 1(Event Player) != True;
  • (Distance Between(Event Player, Event Player.A) < 10 || Event Player.UltForm == True) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • If((Event Player.AltForm == True && Is Using Ability 2(Event Player) != True) == True);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.250, Ignore Condition);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Position Of(Event Player.A) + Vector(0, -100, 0)),
  • To World);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • End;
  • If(Event Player.UltForm == True && Distance Between(Event Player, Event Player.A) > 8);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(4, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Else;
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(4, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • End;
  • Wait(0.100, Ignore Condition);
  • Press Button(Event Player, Button(Reload));
  • Wait(0.750, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • disabled rule("Super Smart Mei AI 3 - Don't attack walls")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mei;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A == Null;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • rule("Super Smart Mei AI 4 - Ice Block")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • Mei;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(9, Ignore Condition);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Zarya AI Initialize - Beam Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zarya;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 2.500;
  • Event Player.MissBase = 1.250;
  • Event Player.Miss = 0.300;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Zarya AI 2 - Make death beam at bad stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zarya;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • If(Distance Between(Event Player, Event Player.A) < 10);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(4, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Else;
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(2, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • disabled Set Facing(Event Player, Direction Towards(Eye Position(Event Player) + Vector(0, Distance Between(Position Of(Event Player),
  • Eye Position(Event Player)) * -0.500, 0), First Of(Sorted Array(Filtered Array(Players Within Radius(Eye Position(
  • Event Player), 30, Team 1, Surfaces And Enemy Barriers), (Is Alive(Current Array Element)
  • == True && Current Array Element != Event Player && Current Array Element.Down != True && True) == True), Distance Between(
  • Event Player, Current Array Element)))), To World);
  • disabled Wait(0.016, Ignore Condition);
  • disabled Press Button(Event Player, Button(Ability 2));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • disabled rule("Super Smart Zarya AI 3 - Only make death beams when bad stuff is around")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zarya;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A == Null;
  • }
  • actions
  • {
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • }
  • }
  • disabled rule("Super Smart Zarya AI 4 - Bubble spam")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zarya;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 1));
  • Wait(4, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Super Smart Zarya AI 5 - No booping the boss off the map")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zarya;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • disabled Y Component Of(Nearest Walkable Position(Event Player)) - Y Component Of(Position Of(Event Player)) > 5;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Apply Impulse(Event Player, Up, 40, To World, Cancel Contrary Motion);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Zarya AI 6 - Punch")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zarya;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • Distance Between(Event Player, Event Player.A) < 3.500;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Set Ability Cooldown(Event Player, Button(Melee), 0);
  • Wait(0.016, Ignore Condition);
  • Press Button(Event Player, Button(Melee));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Zarya AI 7 - Gravity Beam")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Zarya;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • disabled If(Is Dummy Bot(Event Player) == True);
  • disabled If(Team Of(Event Player) == Team 1);
  • If(Event Ability == Button(Melee));
  • Damage(Victim, Event Player, 75);
  • Apply Impulse(Victim, Direction Towards(Event Player, Position Of(Victim) + Vector(0, 1, 0)), Victim.StrongBuff != True ? 3 : 1,
  • To World, Cancel Contrary Motion);
  • Set Status(Victim, Event Player, Stunned, Victim.StrongBuff != True ? 0.200 : 0.100);
  • Else If((Event Ability == Button(Primary Fire) || Event Ability == Button(Secondary Fire)) == True);
  • Apply Impulse(Victim, Direction Towards(Victim, Position Of(Event Player) + Vector(0, 1, 0)), Victim.StrongBuff != True ? 5 : 2,
  • To World, Cancel Contrary Motion);
  • End;
  • disabled End;
  • disabled End;
  • }
  • }
  • rule("Super Smart Genji AI Initialize - Ninja range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 2.500;
  • Event Player.MissBase = 2;
  • Event Player.Miss = 0.250;
  • End;
  • End;
  • }
  • }
  • disabled rule("Super Smart Genji AI - Deflect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Distance Between(Event Player, Event Player.A) > 5;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Ability 2));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Super Smart Genji AI 2 - Do ninja stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • If(Event Player.UltForm == True);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.100, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(0.100, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Else;
  • If((Event Player.AltForm == True && Random Integer(0, 4) == 0) == True);
  • Press Button(Event Player, Button(Ability 2));
  • Wait Until(Is Using Ability 2(Event Player) != True, 4);
  • End;
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • Wait(0.750, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Genji AI 4 - Dash")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Distance Between(Event Player, Event Player.A) < 8;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Genji AI 5 - Mash the jump button")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Genji;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Distance Between(Event Player, Event Player.A) < 15;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Press Button(Event Player, Button(Jump));
  • Wait(Random Real(0.250, 1), Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Mercy AI Initialize - Hello range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 2.500;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Mercy AI - Say Hello")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Distance Between(Event Player, Event Player.A) < 5;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Communicate(Event Player, Hello);
  • Wait(Random Real(4, 10), Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Mercy AI 3 - Fly away and despawn")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • Is Communicating(Event Player.A, Hello) == True;
  • Is Using Ultimate(Event Player) != True;
  • Distance Between(Event Player, Event Player.A) < 5;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(1, Abort When False);
  • Set Status(Event Player, Null, Phased Out, 10);
  • Event Player.MercyHPCD = Event Player.A;
  • Communicate(Event Player, Hello);
  • Start Holding Button(Event Player, Button(Crouch));
  • Wait(Random Real(0.200, 0.300), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Wait(Random Real(0.200, 0.300), Ignore Condition);
  • Start Holding Button(Event Player, Button(Crouch));
  • Wait(Random Real(0.200, 0.300), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Wait(Random Real(0.200, 0.300), Ignore Condition);
  • Wait(1.500, Ignore Condition);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.100, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Start Accelerating(Event Player, Direction Towards(Vector(0, 0, 0), Vector(0, 100, 0)), 100, 20, To World, None);
  • Wait(3, Ignore Condition);
  • If((Is Alive(Event Player) == True && Event Player.AltForm == True && Event Player.MercyHPCD.MercyHPCD != True) == True);
  • Remove Health Pool From Player(Event Player.MercyHPCD.MercyHP);
  • Wait(0.016, Ignore Condition);
  • Play Effect(All Players(All Teams), Good Pickup Effect, Color(Yellow), Event Player.MercyHPCD, 1);
  • Play Effect(All Players(All Teams), Buff Impact Sound, Color(White), Event Player.MercyHPCD, 100);
  • Add Health Pool To Player(Event Player.MercyHPCD, Health, 75, True, True);
  • Event Player.MercyHPCD.MercyHP = Last Created Health Pool;
  • Event Player.MercyHPCD.MercyHPCD = True;
  • Small Message(Event Player.MercyHPCD, Custom String("Friendly Mercy has temporarily increased your maximum health!"));
  • Wait(0.100, Ignore Condition);
  • End;
  • Skip If((Hero Of(Event Player) != Hero(Mercy) || Is Alive(Event Player) != True) == True, 2);
  • Global.FriendlyMercy = True;
  • Destroy Dummy Bot(Team 1, Slot Of(Event Player));
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Mercy AI 4 - Someone killed the friendly Mercy")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(1, Ignore Condition);
  • Teleport(All Players(Team 1), Position Of(Event Player));
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Yellow), Event Player, 3);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(Yellow), Event Player, 100);
  • Damage(Players Within Radius(Eye Position(Event Player), 15, Opposite Team Of(Team Of(Event Player)), Surfaces And Enemy Barriers),
  • Event Player, Event Player.UltForm != True ? 100 : 300);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Mercy AI 5 - Death Damage")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • disabled Distance Between(Event Player, Event Player.A) > 5;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Set Status(Victim, Null, Knocked Down, Victim.StrongBuff != True ? 3 : 0.500);
  • Apply Impulse(Victim, Direction Towards(Position Of(Event Player), Position Of(Victim) + Vector(0, 1, 0)),
  • Victim.StrongBuff != True ? 20 : 4, To World, Cancel Contrary Motion);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Mercy AI 6 - Damage Stuns")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • Mercy;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • disabled Event Player.A == Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Team Of(Attacker) != Team Of(Event Player));
  • Set Status(Event Player, Null, Stunned, 0.250);
  • Wait(0.300, Ignore Condition);
  • Event Player.A = Attacker;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Hanzo AI Initialize - Arrow range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Hanzo;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 15;
  • Event Player.MissBase = 0.750;
  • Event Player.Miss = 0.200;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Hanzo AI 2 - Do archer stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Hanzo;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • If(Event Player.AltForm == True);
  • Press Button(Event Player, Button(Jump));
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Jump));
  • Wait(0.250, Ignore Condition);
  • End;
  • Set Primary Fire Enabled(Event Player, False);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.500, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • If(Event Player.UltForm == True);
  • While(Is Using Ability 2(Event Player) == True);
  • Press Button(Event Player, Button(Jump));
  • Wait(0.250, Ignore Condition);
  • End;
  • Else;
  • Wait(4.900, Ignore Condition);
  • End;
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(Event Player.UltForm == True ? 2 : 0.500, Ignore Condition);
  • disabled Else;
  • disabled Set Primary Fire Enabled(Event Player, True);
  • disabled Start Holding Button(Event Player, Button(Primary Fire));
  • disabled Wait(0.750, Ignore Condition);
  • disabled Stop Holding Button(Event Player, Button(Primary Fire));
  • disabled Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Brig AI Initialize - Mace range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Brigitte;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 2.500;
  • If(Is In Alternate Form(Event Player) == True);
  • Event Player.MissBase = 0.500;
  • Event Player.Miss = 0.150;
  • disabled Event Player.Healer = 1;
  • Else;
  • Event Player.MissBase = 0.500;
  • Event Player.Miss = 0.700;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Brig AI 2 - Apply maces to faces")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Brigitte;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • If((Event Player.AltForm == True && Random Integer(0, 1) == 0) == True);
  • Event Player.Healer = 2;
  • Event Player.A = Null;
  • Wait Until(Event Player.A != Null, 1);
  • If(Team Of(Event Player.A) == Team Of(Event Player));
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.400, Ignore Condition);
  • Press Button(Event Player, Button(Ability 2));
  • End;
  • Event Player.Healer = 0;
  • Event Player.A = Null;
  • Wait Until(Event Player.A != Null, 1);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • If((Event Player.A != Null && Distance Between(Event Player, Event Player.A) < 10) == True);
  • Press Button(Event Player, Button(Primary Fire));
  • disabled If(Event Player.UltForm == True);
  • Wait Until(Is Firing Secondary(Event Player) != True, 4);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.100, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(2, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • disabled End;
  • End;
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Ultimate Brig AI 3 - Do ultimate stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Brigitte;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • Event Player.UltForm == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(2.500, 3.500), Ignore Condition);
  • If(Is True For Any(All Players(Team 1), (Hero Of(Current Array Element) == Hero(Brigitte) && Is Using Ultimate(
  • Current Array Element) == True) == True) != True);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.016, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(3, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Brig AI 4 - Repair Pack Armor")
  • {
  • event
  • {
  • Player Dealt Healing;
  • Team 1;
  • Brigitte;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Ability == Button(Ability 2);
  • Healee.ArmorCD != True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Healee.ArmorCD = True;
  • Remove Health Pool From Player(Healee.Armor);
  • Wait(0.016, Ignore Condition);
  • Add Health Pool To Player(Healee, Armor, Global.J == 1 ? 75 : (Global.J == 2 ? 150 : 225), False, False);
  • Healee.Armor = Last Created Health Pool;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Winston AI Initialize - Anger range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Winston;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 2.500;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Winston AI - Jump")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Winston;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Distance Between(Event Player, Event Player.A) > 7;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(4, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Winston AI 2 - Punch things and become angry")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Winston;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(0.250, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Press Button(Event Player, Button(Ultimate));
  • Wait(4, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Winston AI 3 - Jump Knockdown")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Winston;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Ability == Button(Ability 1);
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Set Status(Victim, Null, Knocked Down, Victim.StrongBuff != True ? 1 : 0.250);
  • Set Facing(Victim, Direction Towards(Eye Position(Victim), Eye Position(Event Player)), To World);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Alternate Winston AI - Pick up other enemies")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Winston;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.AltForm == True;
  • Is Alive(Event Player) == True;
  • Event Player.Rider == Null;
  • First Of(Filtered Array(Players Within Radius(Eye Position(Event Player), 30, Team 1, Surfaces), (Is Alive(Current Array Element)
  • == True && Array Contains(Global.BossList, Hero Of(Current Array Element))
  • != True && Current Array Element != Event Player && Current Array Element.Riding == Null && True) == True)) != 0;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Rider = First Of(Filtered Array(Players Within Radius(Eye Position(Event Player), 30, Team 1, Surfaces), (Is Alive(
  • Current Array Element) == True && Array Contains(Global.BossList, Hero Of(Current Array Element))
  • != True && Current Array Element != Event Player && Current Array Element.Riding == Null && True) == True));
  • Event Player.Rider.Riding = Event Player;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Alternate Winston AI - Pick up other enemies 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Winston;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.Rider != Null;
  • Event Player.AltForm == True;
  • Distance Between(Position Of(Event Player) + Vector(0, 1.500, 0), Event Player.Rider) > 2;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Attach Players(Event Player.Rider, Event Player, Vector(0, 1.500, 0));
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Alternate Winston AI - Pick up other enemies 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Winston;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.Rider != Null;
  • (Is Alive(Event Player.Rider) != True || Is Alive(Event Player) != True || Entity Exists(Event Player.Rider) != True || False)
  • == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Detach Players(Event Player.Rider);
  • Event Player.Rider.Riding = Null;
  • Event Player.Rider = Null;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Dva AI Initialize - Kaboom range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • D.Va;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.AltForm == True);
  • Event Player.Range = 2.500;
  • Event Player.MissBase = 1;
  • Event Player.Miss = 0.250;
  • Else;
  • Event Player.Range = 2.500;
  • Event Player.MissBase = 7;
  • Event Player.Miss = 0.700;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Dva AI - Boosters and Kaboom")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • D.Va;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • Is In Alternate Form(Event Player) == False;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.AltForm == True);
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • Press Button(Event Player, Button(Ability 2));
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(5, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.500, Ignore Condition);
  • If(Normalized Health(Event Player) < 0.500);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • End;
  • Else;
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(1, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Dva AI 2 - Mash mech button until a new mech appears")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • D.Va;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Is In Alternate Form(Event Player) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Dva AI 3 - Taking Damage Stuns")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • D.Va;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Is In Alternate Form(Event Player) == True;
  • Has Status(Event Player, Knocked Down) != True;
  • }
  • actions
  • {
  • disabled If(Is Dummy Bot(Event Player) == True);
  • disabled If(Team Of(Event Player) == Team 1);
  • Set Status(Event Player, Attacker, Knocked Down, 2);
  • Wait(2.300, Ignore Condition);
  • disabled End;
  • disabled End;
  • }
  • }
  • rule("Super Smart Ashe AI Initialize - Dynamite range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ashe;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 20;
  • If((Event Player.AltForm != True && Event Player.UltForm != True) == True);
  • Event Player.MissBase = 9;
  • Event Player.Miss = 0.800;
  • Else;
  • Event Player.MissBase = 0.500;
  • Event Player.Miss = 0.200;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Ashe AI 2 - Throw Dynamite")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ashe;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • If(Event Player.UltForm != True);
  • If(Event Player.AltForm == True);
  • Event Player.MissBase = 0.500;
  • Event Player.Miss = 0.200;
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Event Player.MissBase = 9;
  • Event Player.Miss = 0.800;
  • Wait(0.250, Ignore Condition);
  • End;
  • Start Holding Button(Event Player, Button(Ability 2));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Ability 2));
  • If(Event Player.AltForm == True);
  • Wait(2.500, Ignore Condition);
  • Else;
  • Wait(3.500, Ignore Condition);
  • End;
  • Else;
  • If(Is True For Any(All Players(Team 1), (Hero Of(Current Array Element) == Hero(Ashe) && Is Using Ultimate(Current Array Element)
  • == True) == True) != True);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • End;
  • While(Random Integer(0, 4) > 0);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(Random Real(0.300, 0.500), Ignore Condition);
  • End;
  • Wait(1, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Doomfist AI Initialize - Fist Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Doomfist;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 4;
  • Event Player.MissBase = 7;
  • Event Player.Miss = 0.700;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Doomfist AI 2 - Rocket Punch")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Doomfist;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.100, 0.500), Ignore Condition);
  • If(Event Player.UltForm != True);
  • If((Event Player.AltForm == True && Distance Between(Event Player, Position Of(Event Player.A)) < 12) == True);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.500, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(1.250, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.750, Ignore Condition);
  • Else;
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(1.500, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.750, Ignore Condition);
  • End;
  • Else;
  • Press Button(Event Player, Button(Ability 2));
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(1, Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(2, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • disabled Wait(1, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Torb AI Initialize - Shotgun range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Torbjörn;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 2.500;
  • Event Player.MissBase = 0.250;
  • Event Player.Miss = 0.750;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Torb AI 2 - Shoot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Torbjörn;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.500, Ignore Condition);
  • If((Is Using Ability 1(Event Player) != True && Event Player.UltForm == True) == True);
  • Press Button(Event Player, Button(Ability 1));
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Zen AI Initialize - Medium Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zenyatta;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 20;
  • Event Player.MissBase = 1.250;
  • Event Player.Miss = 0.300;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Zen AI 2 - Throw Balls")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Zenyatta;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.250, Ignore Condition);
  • If((Event Player.AltForm == True || Event Player.UltForm == True) == True);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(Event Player.UltForm == True ? 2 : 1.250, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.250, Ignore Condition);
  • Else;
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(1.300, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Sombra AI Initialize - Close Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Sombra;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 7;
  • Event Player.MissBase = 3;
  • Event Player.Miss = 0.400;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Sombra AI 2 - Shoot Stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Sombra;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • If((Event Player.AltForm == True && Distance Between(Event Player, Position Of(Event Player.A)) > 10 && Is Using Ability 1(
  • Event Player) != True) == True);
  • Press Button(Event Player, Button(Ability 1));
  • Event Player.HideOrb = True;
  • Wait(0.250, Ignore Condition);
  • Wait Until(Is Using Ability 1(Event Player) != True, 4);
  • Event Player.HideOrb = False;
  • Press Button(Event Player, Button(Primary Fire));
  • Else;
  • If(Event Player.UltForm == True);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.750, Ignore Condition);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.100, Ignore Condition);
  • End;
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(3, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.750, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Pharah AI Initialize - Flight Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Pharah;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.UltForm == True);
  • Start Damage Modification(All Players(Team 2), Event Player, 20, Receivers Damagers and Damage Percent);
  • Event Player.EnemyDmgMod = Last Damage Modification ID;
  • End;
  • Event Player.Range = 40;
  • Event Player.MissBase = 1.750;
  • Event Player.Miss = 0.350;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Pharah AI 2 - Shoot Rockets")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Pharah;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • If(Event Player.UltForm == True);
  • Set Ability Cooldown(Event Player, Button(Ability 1), 0);
  • Wait(0.100, Ignore Condition);
  • Set Ultimate Charge(Event Player, 100);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(4, Ignore Condition);
  • Else;
  • If((Event Player.AltForm == True && Ability Cooldown(Event Player, Button(Ability 2)) < 1) == True);
  • Wait(0.500, Ignore Condition);
  • Start Holding Button(Event Player, Button(Ability 2));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.750, Ignore Condition);
  • Else;
  • Wait(0.500, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.750, Ignore Condition);
  • End;
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Pharah AI 3 - Fly")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Pharah;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • Start Holding Button(Event Player, Button(Jump));
  • Wait(1, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Pharah AI 4 - Damage Crowd Control")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Pharah;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Health(Event Player) < Max Health(Event Player) * 0.500;
  • Is On Ground(Event Player) != True;
  • Event Player.Active == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.AbilityCheck = True;
  • Set Status(Event Player, Null, Stunned, 9999);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Pharah AI 5 - Fall Damage")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Pharah;
  • }
  • conditions
  • {
  • Event Player.AbilityCheck == True;
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Is On Ground(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Damage(Players Within Radius(Eye Position(Event Player), 12, All Teams, Surfaces And Enemy Barriers), Event Player, 100);
  • Kill(Event Player, Event Player);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Orange), Event Player, 4);
  • Play Effect(All Players(All Teams), Pharah Rocket Launcher Explosion Sound, Color(White), Position Of(Event Player), 125);
  • Event Player.ForLoopArray = Players Within Radius(Eye Position(Event Player), 12, All Teams, Surfaces And Enemy Barriers);
  • For Player Variable(Event Player, ForLoop, 0, Count Of(Event Player.ForLoopArray), 1);
  • Apply Impulse(Event Player.ForLoopArray[Event Player.ForLoop], Direction Towards(Position Of(Event Player) + Vector(0, -4, 0),
  • Position Of(Event Player.ForLoopArray[Event Player.ForLoop])),
  • Event Player.ForLoopArray[Event Player.ForLoop].StrongBuff != True ? 10 : 2, To World, Cancel Contrary Motion);
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Lucio AI Initialize - Close Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Lúcio;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 7;
  • Event Player.MissBase = 2;
  • Event Player.Miss = 0.350;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Lucio AI 2 - Shoot Stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Lúcio;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • If(Event Player.AltForm == True);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.250, Ignore Condition);
  • End;
  • If((Distance Between(Event Player, Event Player.A) < 5 && Event Player.UltForm == True) == True);
  • Press Button(Event Player, Button(Secondary Fire));
  • Else;
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.500, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • End;
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Lucio AI 3 - Amp it Up Sometimes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Lúcio;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • Start Holding Button(Event Player, Button(Ability 2));
  • Wait(0.500, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Ability 2));
  • Wait(2, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart McCree AI Initialize - FTH range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • McCree;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.AltForm == True);
  • disabled Start Damage Modification(All Players(Team 2), Event Player, 130, Receivers Damagers and Damage Percent);
  • Event Player.Range = 25;
  • Event Player.MissBase = 0.250;
  • Event Player.Miss = 0.100;
  • Else;
  • Event Player.Range = 5;
  • Event Player.MissBase = 1.250;
  • Event Player.Miss = 0.300;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart McCree AI 2 - Shoot")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • McCree;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.AltForm == True);
  • Wait(0.100, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(4, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Else;
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • If(Event Player.UltForm == True);
  • Wait(1, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(1, Ignore Condition);
  • Else;
  • Wait(3, Ignore Condition);
  • End;
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Sigma AI Initialize - Bouncy orb thing range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Sigma;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 10;
  • Event Player.MissBase = 0.500;
  • Event Player.Miss = 0.100;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Sigma AI 2 - Throw Bouncy Orb Things")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Sigma;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.AltForm == True);
  • Set Gravity(Event Player, 30);
  • Press Button(Event Player, Button(Jump));
  • End;
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.700, Ignore Condition);
  • If(Event Player.AltForm == True);
  • Press Button(Event Player, Button(Ability 1));
  • Wait Until(Is Using Ability 1(Event Player) != True, 4);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Sigma AI 3 - Throw Rocks")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Sigma;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.500, 1), Ignore Condition);
  • Start Holding Button(Event Player, Button(Ability 2));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Ability 2));
  • Wait(5, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Sigma AI 4 - Gravity")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Sigma;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • disabled Event Player.A != Null;
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.ForLoopArray = Filtered Array(All Players(All Teams),
  • Current Array Element != Event Player && Current Array Element.StrongBuff != True);
  • For Player Variable(Event Player, ForLoop, 0, Count Of(Event Player.ForLoopArray), 1);
  • Apply Impulse(Event Player.ForLoopArray[Event Player.ForLoop], Direction Towards(Position Of(
  • Event Player.ForLoopArray[Event Player.ForLoop]), Eye Position(Event Player) + Vector(0, 2, 0)), 10, To World,
  • Incorporate Contrary Motion);
  • End;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Moira AI Initialize - Death Laser Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Moira;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 20;
  • Event Player.MissBase = 1;
  • Event Player.Miss = 0.250;
  • If(Event Player.AltForm == True);
  • Event Player.Healer = 1;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Moira AI 2 - Shoot Laser")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Moira;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • disabled If(Event Player.AltForm != True);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • If(Distance Between(Event Player, Event Player.A) < 12 && Event Player.UltForm == True);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.250, Ignore Condition);
  • End;
  • Start Holding Button(Event Player, Button(Ultimate));
  • Wait(0.250, Ignore Condition);
  • Wait Until(Is Using Ultimate(Event Player) != True, 5);
  • Stop Holding Button(Event Player, Button(Ultimate));
  • Cancel Primary Action(Event Player);
  • Wait(0.500, Ignore Condition);
  • disabled Else;
  • disabled Wait(Random Real(0.500, 1), Ignore Condition);
  • disabled Press Button(Event Player, Button(Ability 2));
  • disabled Wait(0.500, Ignore Condition);
  • disabled Press Button(Event Player, Button(Secondary Fire));
  • disabled Wait(1, Ignore Condition);
  • disabled End;
  • If(Distance Between(Event Player, Event Player.A) < 12 && Event Player.UltForm == True);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.250, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Tracer AI Initialize - Close range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Tracer;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 2.500;
  • Event Player.MissBase = 3;
  • Event Player.Miss = 0.400;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Tracer AI 2 - Do blinky stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Tracer;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.100, 0.350), Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(Event Player.UltForm == True ? (Random Integer(1, 7) == 1 ? 1.200 : 0.500) : 1, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • If(Event Player.AltForm == True);
  • If(Random Integer(1, 2) == 1);
  • Wait(0.250, Ignore Condition);
  • Press Button(Event Player, Button(Ability 2));
  • Else;
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(1, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • End;
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Wrecking Ball AI Initialize - Ball range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 5;
  • Event Player.MissBase = 1.250;
  • Event Player.Miss = 0.300;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Wrecking Ball AI 2 - Do ball stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • If((Distance Between(Event Player, Event Player.A) < 30 && Event Player.AltForm == True) == True);
  • If(Is In Alternate Form(Event Player) != True);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • End;
  • Press Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Apply Impulse(Event Player, Direction Towards(Event Player, Position Of(Event Player.A) + Vector(0, 10, 0)), 40, To World,
  • Cancel Contrary Motion);
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Crouch));
  • Wait(1, Ignore Condition);
  • End;
  • If(Distance Between(Event Player, Event Player.A) < 12);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(5, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Reload));
  • Wait(1, Ignore Condition);
  • Else;
  • Press Button(Event Player, Button(Ability 1));
  • Wait(2, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Wrecking Ball AI 3 - Slam Knockdown")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • Wrecking Ball;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Ability == Button(Crouch);
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Set Status(Victim, Null, Knocked Down, Victim.StrongBuff != True ? 1 : 0.250);
  • Set Facing(Victim, Direction Towards(Eye Position(Victim), Eye Position(Event Player)), To World);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Orisa AI Initialize - Shooting Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Orisa;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 20;
  • Event Player.MissBase = 1.250;
  • Event Player.Miss = 0.300;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Orisa AI 2 - Do Stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Orisa;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • If(Event Player.AltForm == True);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Position Of(Event Player.A) + Vector(0, -100, 0)),
  • To World);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.500, Ignore Condition);
  • End;
  • Press Button(Event Player, Button(Jump));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Jump));
  • Wait(2, Ignore Condition);
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(3, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.500, Ignore Condition);
  • If(Is Using Ultimate(Event Player) != True);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.500, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Orisa AI 3 - Fortify Bounce")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Orisa;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • Is On Ground(Event Player) == True;
  • Is Using Ability 1(Event Player) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Set Status(Filtered Array(All Players(Team 2), Is On Ground(Current Array Element)
  • == True && Current Array Element.StrongBuff != True), Event Player, Knocked Down, 0.500);
  • Set Status(Filtered Array(All Players(Team 2), Current Array Element.StrongBuff == True), Event Player, Knocked Down, 0.250);
  • Apply Impulse(Filtered Array(All Players(All Teams), (Hero Of(Current Array Element) != Hero(Orisa) && Is On Ground(
  • Current Array Element) == True && Current Array Element.StrongBuff != True) == True), Up, 15, To World,
  • Cancel Contrary Motion);
  • Apply Impulse(Filtered Array(All Players(All Teams), Current Array Element.StrongBuff == True), Up, 4, To World,
  • Cancel Contrary Motion);
  • Play Effect(All Players(All Teams), Bastion Tank Cannon Explosion Sound, Color(White), Event Player, 100);
  • Play Effect(All Players(All Teams), Ring Explosion, Color(White), Event Player, 50);
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Baptiste AI Initialize - Healer range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Baptiste;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 15;
  • Event Player.MissBase = 1.250;
  • Event Player.Miss = 0.300;
  • If(Event Player.UltForm == True);
  • Event Player.Healer = 1;
  • Set Projectile Speed(Event Player, 500);
  • Set Projectile Gravity(Event Player, 0);
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Baptiste AI 2 - Heal and shoot stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Baptiste;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • If((Event Player.AltForm == True && Ability Cooldown(Event Player, Button(Ability 2)) < 1) == True);
  • Set Facing(Event Player, Direction Towards(Eye Position(Event Player), Position Of(Event Player.A) + Vector(0, -100, 0)),
  • To World);
  • Press Button(Event Player, Button(Ability 2));
  • Wait(0.500, Ignore Condition);
  • End;
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.500, Ignore Condition);
  • If((Event Player.UltForm == True && Team Of(Event Player.A) == Team Of(Event Player)) == True);
  • Start Holding Button(Event Player, Button(Secondary Fire));
  • Wait(0.100, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Secondary Fire));
  • Else;
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(2, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • End;
  • Wait(0.500, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Ana AI Initialize - Medium Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Event Player.Range = 20;
  • Event Player.MissBase = 0.500;
  • Event Player.Miss = 0.100;
  • Event Player.Healer = 1;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Ana AI 2 - Shoot Everyone")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Ana;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.750), Ignore Condition);
  • disabled Set Facing(Event Player, Direction Towards(Eye Position(Event Player) + Vector(0, Distance Between(Position Of(Event Player),
  • Eye Position(Event Player)) * -0.500, 0), First Of(Sorted Array(Filtered Array(Players Within Radius(Eye Position(
  • Event Player), 30, All Teams, Surfaces And Enemy Barriers), (Is Alive(Current Array Element)
  • == True && Current Array Element != Event Player && Current Array Element.Down != True && (Team Of(Current Array Element)
  • == Team 2 || Normalized Health(Current Array Element) < 0.990)) == True), Distance Between(Event Player,
  • Current Array Element)))), To World);
  • If((Team Of(Event Player.A) == Team Of(Event Player) && Is Using Ultimate(Event Player)
  • != True && Event Player.UltForm == True && True) == True);
  • Set Ultimate Charge(Event Player, 100);
  • Wait(0.100, Ignore Condition);
  • Press Button(Event Player, Button(Ultimate));
  • Wait(0.050, Ignore Condition);
  • End;
  • Press Button(Event Player, Button(Primary Fire));
  • Wait(0.750, Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Echo AI Initialize - Close Range")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Echo;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • Wait(0.500, Ignore Condition);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.UltForm == True);
  • Start Damage Modification(All Players(Team 2), Event Player, 50, Receivers Damagers and Damage Percent);
  • Event Player.EnemyDmgMod = Last Damage Modification ID;
  • End;
  • Event Player.Range = 7;
  • Event Player.MissBase = 1.750;
  • Event Player.Miss = 0.350;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Echo AI 2 - Shoot and fly around")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Echo;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(Random Real(0.250, 0.500), Ignore Condition);
  • If(Distance Between(Event Player, Event Player.A) < 7);
  • disabled Press Button(Event Player, Button(Primary Fire));
  • Start Holding Button(Event Player, Button(Jump));
  • Start Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.250, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Primary Fire));
  • Wait(0.800, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Jump));
  • Wait(0.250, Ignore Condition);
  • Else If(Distance Between(Event Player, Event Player.A) > 20);
  • Press Button(Event Player, Button(Ability 1));
  • Start Holding Button(Event Player, Button(Jump));
  • Wait(0.750, Ignore Condition);
  • Press Button(Event Player, Button(Ability 1));
  • Wait(0.750, Ignore Condition);
  • Stop Holding Button(Event Player, Button(Jump));
  • Else If(Event Player.UltForm == True);
  • Press Button(Event Player, Button(Secondary Fire));
  • Wait(1, Ignore Condition);
  • End;
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Super Smart Echo AI 3 - Jump when firing")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • Echo;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Event Player.A != Null;
  • Is Firing Primary(Event Player) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Apply Impulse(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player), 25), -20, To World,
  • Cancel Contrary Motion);
  • End;
  • End;
  • }
  • }
  • rule("Enemy Damage CC")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Event Damage > Max Health(Event Player) * 0.500;
  • disabled Has Status(Event Player, Knocked Down) != True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If((Event Damage > Max Health(Event Player) * 0.500 || (Attacker.SpecialType == 1 && Event Damage > Max Health(Event Player)
  • * 0.250)) == True);
  • If(Has Status(Event Player, Knocked Down) != True);
  • Set Status(Event Player, Attacker, Knocked Down, 2);
  • Apply Impulse(Event Player, Direction Towards(Attacker, Position Of(Event Player) + Vector(0, 3, 0)), 15, To World,
  • Cancel Contrary Motion);
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Enemy Damage CC 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Is Alive(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.100, Abort When False);
  • Event Player.Resistance = Max Health(Event Player) * Random Real(0.400, 0.600);
  • }
  • }
  • rule("Enemy Damage CC 3")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Has Spawned(Event Player) == True;
  • disabled Is Alive(Event Player) == True;
  • disabled Event Player.Resistance > 0;
  • disabled Event Damage < Max Health(Event Player) * 0.500;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Has Spawned(Event Player) == True);
  • If(Is Alive(Event Player) == True);
  • If(Event Player.Resistance > 0);
  • If(((Attacker.SpecialType == 1 && Event Damage < Max Health(Event Player) * 0.250) || (
  • Attacker.SpecialType != 1 && Event Damage < Max Health(Event Player) * 0.500)) == True);
  • disabled Event Player.ImpactMultiplier += Event Damage * 0.100;
  • Event Player.Resistance += Event Damage * (Attacker.SpecialType == 1 ? 2.300 : 1) * -1;
  • If(Event Player.Resistance <= 0);
  • Set Status(Event Player, Attacker, Stunned, 0.400);
  • Wait(1, Ignore Condition);
  • Event Player.Resistance = Max Health(Event Player) * Random Real(0.400, 0.600);
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • }
  • }
  • disabled rule("Enemy Damage CC 4")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.Resistance < 0;
  • Has Status(Event Player, Stunned) != True;
  • }
  • actions
  • {
  • Set Status(Event Player, Attacker, Stunned, 1);
  • Wait(1, Ignore Condition);
  • Event Player.Resistance = Max Health(Event Player) * Random Real(0.400, 0.600);
  • }
  • }
  • disabled rule("Enemy CC 5")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Event Player.ImpactMultiplier + -0.500 > 0;
  • }
  • actions
  • {
  • Wait(0.100, Ignore Condition);
  • Event Player.ImpactMultiplier -= 0.500;
  • Wait(0.400, Ignore Condition);
  • Loop If Condition Is True;
  • Event Player.ImpactMultiplier = 0;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Down players are Phased Out")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.Down == True;
  • Has Status(Event Player, Phased Out) != True;
  • Has Status(Event Player, Knocked Down) == True;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Phased Out, 9999);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Down players are Knocked Down")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.Down == True;
  • Has Status(Event Player, Knocked Down) != True;
  • }
  • actions
  • {
  • Set Status(Event Player, Null, Unkillable, 0.200);
  • Clear Status(Event Player, Phased Out);
  • Wait(0.100, Abort When False);
  • Set Status(Event Player, Null, Knocked Down, 9999);
  • Wait(0.100, Ignore Condition);
  • If(Event Player.Down == True);
  • Set Status(Event Player, Null, Phased Out, 9999);
  • End;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • If(Event Player.Down != True);
  • Clear Status(Event Player, Knocked Down);
  • Clear Status(Event Player, Phased Out);
  • End;
  • }
  • }
  • rule("Ring on Death")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) != True;
  • Is Alive(Event Player) == False;
  • Event Player.G == Null;
  • }
  • actions
  • {
  • "Gamemode originally created by Squ1dward #1665"
  • Skip If(Event Player.G == Null, 1);
  • Destroy Effect(Event Player.G);
  • Big Message(All Players(All Teams), Custom String("{1} {0} is Down!", Hero Icon String(Hero Of(Event Player)), Event Player));
  • Create Effect(All Players(All Teams), Ring, Color(Yellow), Event Player, 3, Visible To Position and Radius);
  • Event Player.G = Last Created Entity;
  • Skip If(Distance Between(Vector(0, Y Component Of(Position Of(Event Player)), 0), Vector(0, Y Component Of(
  • Nearest Walkable Position(Event Player)), 0)) < 5, 1);
  • Teleport(Event Player, Global.SpawnPos);
  • Resurrect(Event Player);
  • Set Status(Event Player, Null, Knocked Down, 9999);
  • Event Player.DownTimer = 45;
  • Event Player.Down = True;
  • Event Player.ReviveFX = Empty Array;
  • Create Effect(Event Player, Beacon Sound, Color(White), Event Player, 10000, Visible To Position and Radius);
  • Event Player.ReviveFX = Append To Array(Event Player.ReviveFX, Last Created Entity);
  • Create Effect(Event Player, Beacon Sound, Color(White), Event Player, 10000, Visible To Position and Radius);
  • Event Player.ReviveFX = Append To Array(Event Player.ReviveFX, Last Created Entity);
  • Create Effect(Event Player, Beacon Sound, Color(White), Event Player, 10000, Visible To Position and Radius);
  • Event Player.ReviveFX = Append To Array(Event Player.ReviveFX, Last Created Entity);
  • }
  • }
  • rule("Clear fx")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == False;
  • Event Player.H != Null;
  • (Event Player.Down != True || Last Of(Filtered Array(Players Within Radius(Event Player, 3, Team 2, Surfaces),
  • Current Array Element.Down != True)) == 0) == True;
  • }
  • actions
  • {
  • Destroy Effect(Event Player.H);
  • Destroy Effect(Event Player.I);
  • Wait(0.100, Abort When False);
  • Event Player.H = Null;
  • Event Player.I = Null;
  • }
  • }
  • rule("No Ring on Alive")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.Down != True;
  • disabled Event Player.G != Null;
  • Is Dummy Bot(Event Player) != True;
  • }
  • actions
  • {
  • Stop Facing(Event Player);
  • Clear Status(Event Player, Phased Out);
  • Clear Status(Event Player, Knocked Down);
  • Destroy Effect(Event Player.G);
  • Destroy Effect(Event Player.ReviveFX[2]);
  • Destroy Effect(Event Player.ReviveFX[1]);
  • Destroy Effect(Event Player.ReviveFX[0]);
  • Destroy Effect(Event Player.ReviveFx2);
  • Destroy Effect(Event Player.ReviveFx3);
  • Destroy In-World Text(Event Player.ReviveFX4);
  • Wait(0.100, Ignore Condition);
  • Event Player.G = Null;
  • }
  • }
  • rule("Everyone Died at the Same Time")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is True For Any(Filtered Array(All Players(Team 2), Current Array Element != Players In Slot(5, Team 2)),
  • Current Array Element.Down != True) == False;
  • Is Game In Progress == True;
  • }
  • actions
  • {
  • "You can also lose if all of the players die at the same time. After you've successfully defended a hero the victory screen plays instead of defeat when it happens."
  • If(Global.MissionComplete != True);
  • Declare Team Victory(Team 1);
  • Else;
  • If(Global.FastMode != True);
  • Declare Team Victory(Team 2);
  • Else;
  • Declare Team Victory(Team 1);
  • End;
  • Create Dummy Bot(Global.LastHero, Team 2, 4, Vector(0, 1000, 0), Vector(0, 0, 0));
  • End;
  • }
  • }
  • rule("Create Timer")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • actions
  • {
  • Event Player.ReviveStuff = Empty Array;
  • Create In-World Text(Filtered Array(All Players(All Teams), (
  • Current Array Element != Event Player && Event Player.Down == True && True) == True), Custom String(
  • "{0} {1} needs to be revived: {2}", Event Player, Hero Icon String(Hero Of(Event Player)), Event Player.DownTimer),
  • Event Player, 1, Do Not Clip, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.ReviveStuff = Append To Array(Event Player.ReviveStuff, Last Created Entity);
  • Create HUD Text(Filtered Array(Append To Array(Empty Array, Event Player), Current Array Element.Down == True), Custom String(
  • "\r\n\r\nDying: {0}", Event Player.DownTimer), Null, Null, Top, 5, Color(Yellow), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Event Player.ReviveStuff = Append To Array(Event Player.ReviveStuff, Last Created Entity);
  • Create Icon(Filtered Array(All Players(All Teams), (Event Player.Down == True && Current Array Element != Event Player) == True),
  • Event Player, Exclamation Mark, Visible To and Position, Color(Yellow), True);
  • Event Player.ReviveStuff = Append To Array(Event Player.ReviveStuff, Last Created Entity);
  • }
  • }
  • rule("Countdown")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.Down == True;
  • First Of(Filtered Array(Players Within Radius(Event Player, 3, Team 2, Surfaces), Current Array Element.Down != True)) == 0;
  • }
  • actions
  • {
  • Event Player.DownTimer += -1;
  • If((Random Integer(0, 1) == 0 && Event Player.DownTimer == 43 && True) == True);
  • Communicate(Players In Slot(5, Team 2), Fall Back);
  • End;
  • If(Event Player.DownTimer == 41);
  • Communicate(Event Player, Need Help);
  • End;
  • If(Event Player.DownTimer < 1);
  • Big Message(All Players(All Teams), Custom String("{0} {1} wasn't revived in time", Event Player, Hero Icon String(Hero Of(
  • Event Player))));
  • Wait(4, Ignore Condition);
  • If(Global.MissionComplete != True);
  • Declare Team Victory(Team 1);
  • Else;
  • Declare Team Victory(Global.FastMode != True ? Team 2 : Team 1);
  • Create Dummy Bot(Global.LastHero, Team 2, 4, Vector(0, 1000, 0), Vector(0, 0, 0));
  • End;
  • End;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Down effects")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.Down == True;
  • Event Player.DownTimer < 15;
  • }
  • actions
  • {
  • Start Facing(Event Player, Direction Towards(Eye Position(Event Player), World Vector Of(Vector(0, 25, 1), Event Player,
  • Rotation And Translation)), 25, To World, None);
  • Create Effect(Filtered Array(Append To Array(Empty Array, Event Player), Event Player.DownTimer < 5), Cloud, Color(Black),
  • Eye Position(Event Player) + Vector(0, 2 + Event Player.DownTimer * 1, 0), Event Player.DownTimer * -2 + 12.750,
  • Visible To Position and Radius);
  • Event Player.ReviveFx2 = Last Created Entity;
  • Create Effect(Event Player, Good Aura, Color(Black), Eye Position(Event Player) + Vector(0, 0.100 + 0, 0), 50,
  • Visible To Position and Radius);
  • Event Player.ReviveFx3 = Last Created Entity;
  • disabled Create In-World Text(Event Player.DownTimer < 20 ? Event Player : Null, Custom String("●"), World Vector Of(Vector(0, 1.500, 1),
  • Event Player, Rotation And Translation) + Vector(0, 0, 0), 4, Do Not Clip, Visible To Position String and Color, Custom Color(
  • 255, 255, 255, (-20 + Event Player.DownTimer) * -12.750), Visible Never);
  • disabled Event Player.ReviveFX4 = Last Text ID;
  • }
  • }
  • disabled rule("Special FX")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.ArenaFX = Empty Array;
  • Create Effect(All Players(All Teams), Bad Aura, Color(White), Global.SpawnPos + Vector(0, 150, 0), 150,
  • Visible To Position and Radius);
  • Global.ArenaFX = Append To Array(Global.ArenaFX, Last Created Entity);
  • Create Effect(All Players(All Teams), Cloud, Color(White), Global.SpawnPos + Vector(0, -0.100, 0), 75,
  • Visible To Position and Radius);
  • Global.ArenaFX = Append To Array(Global.ArenaFX, Last Created Entity);
  • Create Effect(All Players(All Teams), Bad Aura, Color(White), Global.SpawnPos + Vector(0, 0, 150), 150,
  • Visible To Position and Radius);
  • Global.ArenaFX = Append To Array(Global.ArenaFX, Last Created Entity);
  • Create Effect(All Players(All Teams), Bad Aura, Color(White), Global.SpawnPos + Vector(0, 0, -150), 150,
  • Visible To Position and Radius);
  • Global.ArenaFX = Append To Array(Global.ArenaFX, Last Created Entity);
  • Create Effect(All Players(All Teams), Bad Aura, Color(White), Global.SpawnPos + Vector(-150, 0, 0), 150,
  • Visible To Position and Radius);
  • Global.ArenaFX = Append To Array(Global.ArenaFX, Last Created Entity);
  • Create Effect(All Players(All Teams), Bad Aura, Color(White), Global.SpawnPos + Vector(150, 0, 0), 150,
  • Visible To Position and Radius);
  • Global.ArenaFX = Append To Array(Global.ArenaFX, Last Created Entity);
  • }
  • }
  • disabled rule("Special FX 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • Event Player.AmbientEffects = Empty Array;
  • Create Effect(Event Player, Beacon Sound, Color(Red), Event Player, 10000, Visible To Position and Radius);
  • Event Player.AmbientEffects = Append To Array(Event Player.AmbientEffects, Last Created Entity);
  • Create Effect(Event Player, Beacon Sound, Color(Red), Event Player, 10000, Visible To Position and Radius);
  • Event Player.AmbientEffects = Append To Array(Event Player.AmbientEffects, Last Created Entity);
  • }
  • }
  • rule("Difficulty Text")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • "There's a helpful display telling what difficulty level you're currently playing!"
  • Global.J = 2;
  • Global.DifficultyText = Custom String("Normal");
  • Create HUD Text(All Players(All Teams), Custom String("Difficulty: {0}", Global.DifficultyText), Null, Null, Right, -1, Color(
  • White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Create HUD Text(All Players(All Teams), Global.FastMode != True ? Custom String("Round {0}/{1}", Global.Round, Global.FinalRound)
  • : Custom String("Round {0}/10", Global.Round), Null, Null, Top, -2, Color(White), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • }
  • }
  • rule("Choose Difficulty")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player == Host Player;
  • Is In Setup == True;
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • }
  • actions
  • {
  • "The host can select the difficulty before the game by pressing the secondary and primary fire buttons in the spawn room"
  • Skip If(Global.J >= 3, 2);
  • Global.J += 1;
  • Skip(1);
  • Global.J = 1;
  • If(Global.J == 1);
  • Global.DifficultyText = Custom String("Easy");
  • Else If(Global.J == 2);
  • Global.DifficultyText = Custom String("Normal");
  • Else If(Global.J == 3);
  • Global.DifficultyText = Custom String("Hard");
  • End;
  • }
  • }
  • rule("Confirm Difficulty")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player == Host Player;
  • Is In Setup == True;
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • }
  • actions
  • {
  • Set Match Time(0);
  • Big Message(All Players(All Teams), String("{0}: {1}", Custom String("Difficulty"), Global.DifficultyText));
  • }
  • }
  • rule("Difficulty Messages")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player == Host Player;
  • Is In Setup == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Big Message(Event Player, String("{0} -> {1}", String("{0} {1} {2}", String("Select"), String("Enemy"), String("Strength")),
  • String("Secondary Fire")));
  • Wait(4, Abort When False);
  • Big Message(Event Player, String("{0} -> {1}", String("{0} {1}", String("Start"), String("Game")), String("Primary Fire")));
  • Wait(4, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Modify Bot Difficulty")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • "Difficulty 3 is the full enemy strength, difficulty 2 is 75% health and 66% damage, difficulty 1 is 50% health and 33% damage"
  • Skip If(Global.J != 1, 3);
  • Set Healing Dealt(Event Player, 50);
  • Set Max Health(Event Player, 50);
  • Set Damage Dealt(Event Player, 33);
  • Skip If(Global.J != 2, 3);
  • Set Healing Dealt(Event Player, 100);
  • Set Max Health(Event Player, 65);
  • Set Damage Dealt(Event Player, 50);
  • Skip If(Global.J != 3, 3);
  • Set Healing Dealt(Event Player, 110);
  • Set Max Health(Event Player, 100);
  • Set Damage Dealt(Event Player, 75);
  • Set Status(Event Player, Null, Stunned, 2);
  • Set Invisible(Event Player, All);
  • Create Effect(All Players(All Teams), Smoke Sound, Color(White), Event Player, 10000, Visible To Position and Radius);
  • Event Player.Spawnfx2 = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Create Effect(All Players(All Teams), Cloud, Color(White), Position Of(Event Player) + Vector(0, Distance Between(Position Of(
  • Event Player), Eye Position(Event Player)) * 0.500, 0), 2, Visible To Position and Radius);
  • Event Player.Spawnfx = Last Created Entity;
  • Wait(0.250, Ignore Condition);
  • If((Global.Round == (Global.FastMode == True ? 10 : Global.FinalRound) + 0 && Global.FinalBoss != True && Array Contains(
  • All Tank Heroes, Hero Of(Event Player)) == True && True) == True);
  • Global.FinalBoss = True;
  • Event Player.SpecialType = 998;
  • Else;
  • If((Global.MissionComplete == True && Random Integer(1, 150) == 1) == True);
  • Event Player.SpecialType = 999;
  • Else;
  • If(Global.ForceMod != 0);
  • Event Player.SpecialType = Global.ForceMod;
  • Else;
  • Event Player.SpecialType = Random Integer(0, Global.TypeUnlock);
  • End;
  • End;
  • End;
  • If((Array Contains(Global.UltimateForms, Hero Of(Event Player)) == True && Random Integer(0, 1) == 0) == True);
  • Event Player.UltForm = True;
  • disabled Create Effect(Filtered Array(All Players(All Teams), Event Player.HideOrb != True), Orb, Color(Red), Eye Position(Event Player)
  • + Vector(0, 0.500, 0), 1, Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Event Player.HideOrb != True), Echo Cloning Effect, Team Of(Event Player),
  • Eye Position(Event Player) + Vector(0, 0.700, 0), 1, Visible To Position and Radius);
  • Event Player.AltOrb = Last Created Entity;
  • End;
  • If((Array Contains(Global.AlternateForms, Hero Of(Event Player)) == True && Random Integer(0, 1)
  • == 0 && Event Player.UltForm != True) == True);
  • Event Player.AltForm = True;
  • disabled Create Effect(Filtered Array(All Players(All Teams), Event Player.HideOrb != True), Orb, Color(White), Eye Position(Event Player)
  • + Vector(0, 0.500, 0), 1, Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Event Player.HideOrb != True), Echo Cloning Effect, Opposite Team Of(Team Of(
  • Event Player)), Eye Position(Event Player) + Vector(0, 0.700, 0), 1, Visible To Position and Radius);
  • Event Player.AltOrb = Last Created Entity;
  • End;
  • Wait(0.016, Ignore Condition);
  • Set Status(Event Player, Null, Phased Out, 2);
  • Wait(2, Ignore Condition);
  • Set Invisible(Event Player, None);
  • Wait(0.500, Ignore Condition);
  • Destroy Effect(Event Player.Spawnfx);
  • Destroy Effect(Event Player.Spawnfx2);
  • Event Player.Active = True;
  • }
  • }
  • rule("Camera 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) != True;
  • Global.Camera != Null;
  • Global.CameraLook != Null;
  • }
  • actions
  • {
  • Start Camera(Event Player, Global.Camera, Global.CameraLook, 25);
  • }
  • }
  • rule("Camera 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) != True;
  • Global.Camera == Null;
  • Global.CameraLook == Null;
  • }
  • actions
  • {
  • Stop Camera(Event Player);
  • }
  • }
  • rule("Override Spawn Room Auto Teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player == Players In Slot(4, Team 2);
  • Is Dummy Bot(Event Player) == True;
  • Global.F == 0;
  • Distance Between(Event Player, Global.C) > 2;
  • }
  • actions
  • {
  • Teleport(Players In Slot(4, Team 2), Global.C);
  • }
  • }
  • rule("Remove Effects")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled (Event Player.SpecialType > 0 || Event Player.AltForm == True || Event Player.UltForm == True) == True;
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • }
  • actions
  • {
  • If((Event Player.SpecialType > 0 || Event Player.AltForm == True || Event Player.UltForm == True) == True);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Destroy Effect(Event Player.SpecialEffect);
  • Destroy In-World Text(Event Player.SpecialIcon);
  • Destroy Effect(Event Player.AltOrb);
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Special Round Start")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.SpecialRound == True;
  • }
  • actions
  • {
  • Communicate(Players In Slot(5, Team 2), Incoming);
  • Create Effect(All Players(All Teams), Light Shaft, Color(Green), Global.EscortGoal, 4, Visible To Position and Radius);
  • Global.SpecialRing = Last Created Entity;
  • Create Icon(All Players(All Teams), Vector(X Component Of(Global.EscortGoal), Y Component Of(Global.EscortGoal) + 2.500,
  • Z Component Of(Global.EscortGoal)), Flag, Visible To and Position, Color(Green), True);
  • Global.SpecialIcon = Last Created Entity;
  • Global.SpecialPos = Global.EscortGoal;
  • Set Objective Description(All Players(All Teams), Custom String("Escort {0} {1} to the safe zone", Hero Icon String(Hero Of(
  • Players In Slot(5, Team 2))), Hero Of(Players In Slot(5, Team 2))), Visible To and String);
  • Wait(4, Ignore Condition);
  • Set Status(All Players(Team 2), Null, Phased Out, 0.600);
  • Set Slow Motion(10);
  • Global.Camera = Ray Cast Hit Position(Global.SpecialPos, Global.SpecialPos + Vector(0, 4, 10), Empty Array, Empty Array, False);
  • Global.CameraLook = Global.SpecialPos;
  • Big Message(All Players(All Teams), Custom String("Escort {0} {1} to the safe zone!", Hero Icon String(Hero Of(Players In Slot(5,
  • Team 2))), Players In Slot(5, Team 2)));
  • Wait(0.600, Ignore Condition);
  • Set Slow Motion(100);
  • Global.Camera = Null;
  • Global.CameraLook = Null;
  • Wait(1, Ignore Condition);
  • Communicate(Players In Slot(5, Team 2), Push Forward);
  • Wait(2, Ignore Condition);
  • Communicate(Players In Slot(5, Team 2), Go);
  • }
  • }
  • rule("Special Round End")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.SpecialRound == False;
  • }
  • actions
  • {
  • Destroy Effect(Global.SpecialRing);
  • Destroy Icon(Global.SpecialIcon);
  • Global.SpecialPos = 0;
  • }
  • }
  • rule("Special Round Goal")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.SpecialRound == True;
  • Is Dummy Bot(Players In Slot(5, Team 2)) == True;
  • Is Alive(Players In Slot(5, Team 2)) == True;
  • Distance Between(Players In Slot(5, Team 2), Global.SpecialPos) < 4;
  • }
  • actions
  • {
  • Global.LastHero = Hero Of(Players In Slot(5, Team 2));
  • Wait(1, Abort When False);
  • Global.MissionComplete = True;
  • Set Status(All Players(Team 2), Null, Phased Out, 30);
  • Big Message(All Players(All Teams), Custom String("You successfully defended {0} {1}!", Hero Icon String(Hero Of(Players In Slot(5,
  • Team 2))), Players In Slot(5, Team 2)));
  • Set Objective Description(All Players(All Teams), Custom String("The safe zone has been reached", Hero Icon String(Hero Of(
  • Players In Slot(5, Team 2))), Hero Of(Players In Slot(5, Team 2))), Visible To and String);
  • Wait(1, Ignore Condition);
  • Communicate(Players In Slot(5, Team 2), Thanks);
  • Wait(3, Ignore Condition);
  • Destroy Dummy Bot(Team 2, 5);
  • Kill(All Players(Team 1), Null);
  • Global.SpecialRound = False;
  • Global.Enemies = Empty Array;
  • Wait(1, Ignore Condition);
  • All Players(Team 2).Down = False;
  • Set Match Time(22);
  • Global.PlayerMods = True;
  • Set Objective Description(All Players(All Teams), Custom String("Select a modifier"), Visible To and String);
  • Wait(23, Ignore Condition);
  • Set Match Time(10000);
  • Skip If(Global.J != 1, 5);
  • If(Is True For Any(All Players(Team 2), Array Contains(All Support Heroes, Hero Of(Current Array Element)) == True) == True);
  • Create Dummy Bot(Random Value In Array(All Tank Heroes), Team 2, 5, Global.SpawnPos, Forward);
  • Else;
  • Create Dummy Bot(Random Value In Array(Append To Array(Append To Array(Empty Array, Hero(Mercy)), Hero(Zenyatta))), Team 2, 5,
  • Global.SpawnPos, Forward);
  • End;
  • Skip If(Global.J != 2, 4);
  • Skip If(First Of(Filtered Array(All Players(Team 2), Array Contains(All Support Heroes, Hero Of(Current Array Element)) == True))
  • == 0, 2);
  • Create Dummy Bot(Random Value In Array(Append To Array(All Damage Heroes, All Support Heroes)), Team 2, 5, Global.SpawnPos,
  • Forward);
  • Skip(1);
  • Create Dummy Bot(Random Value In Array(Append To Array(Append To Array(Empty Array, Hero(Mercy)), Hero(Zenyatta))), Team 2, 5,
  • Global.SpawnPos, Forward);
  • Skip If(Global.J != 3, 1);
  • Create Dummy Bot(Random Value In Array(Append To Array(Append To Array(Empty Array, Hero(D.Va)), Hero(Tracer))), Team 2, 5,
  • Global.SpawnPos, Forward);
  • Wait(0.100, Ignore Condition);
  • Skip If((Global.J != 3 || Hero Of(Players In Slot(5, Team 2)) != Hero(D.Va)) == True, 1);
  • Kill(Players In Slot(5, Team 2), Null);
  • If((Global.J == 1 && Array Contains(All Support Heroes, Hero Of(Players In Slot(5, Team 2))) == True) == True);
  • Players In Slot(5, Team 2).SpecialType = 1;
  • Wait(0.100, Ignore Condition);
  • Set Healing Dealt(Players In Slot(5, Team 2), 100);
  • End;
  • Set Damage Dealt(Players In Slot(5, Team 2), 0);
  • Set Damage Received(Players In Slot(5, Team 2), 35);
  • Set Healing Received(Players In Slot(5, Team 2), 35);
  • Create Icon(All Players(All Teams), Players In Slot(5, Team 2), Plus, Visible To and Position, Color(Green), True);
  • Players In Slot(5, Team 2).DefendIcon = Last Created Entity;
  • If(Hero Of(Players In Slot(5, Team 2)) != Global.LastHero);
  • Set Objective Description(All Players(All Teams), Custom String("Protect {1} {0}", Hero Icon String(Hero Of(Players In Slot(5,
  • Team 2))), Hero Of(Players In Slot(5, Team 2))), Visible To and String);
  • Big Message(All Players(All Teams), Custom String("They're attacking again! Protect {0} {1}!", Hero Icon String(Hero Of(
  • Players In Slot(5, Team 2))), Players In Slot(5, Team 2)));
  • Else;
  • Set Objective Description(All Players(All Teams), Custom String("Protect other {1} {0}", Hero Icon String(Hero Of(Players In Slot(
  • 5, Team 2))), Hero Of(Players In Slot(5, Team 2))), Visible To and String);
  • Big Message(All Players(All Teams), Custom String("They're attacking again! Protect other {0} {1}!", Hero Icon String(Hero Of(
  • Players In Slot(5, Team 2))), Players In Slot(5, Team 2)));
  • End;
  • }
  • }
  • rule("Endless Special Rounds")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.SpecialRound == True;
  • Count Of(Global.Enemies) < 10;
  • Global.RoundPoints < 5;
  • }
  • actions
  • {
  • Global.RoundPoints = 5;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Special Round Teleport")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • (Global.SpecialRound == True || Global.CompatibilityMode == True) == True;
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Is Alive(Event Player) == True;
  • Entity Exists(Event Player.Spawnfx) != True;
  • Event Player.Active == True;
  • (Hero Of(Event Player) == Hero(Mei) && Is Using Ability 1(Event Player) == True) != True;
  • disabled Global.TeleDelay != True;
  • disabled Last Of(Filtered Array(Players Within Radius(Eye Position(Event Player), 30, Team 2, Surfaces), (Is Alive(Current Array Element)
  • == True && Has Spawned(Current Array Element) == True && Current Array Element.Down != True && True) == True)) == 0;
  • }
  • actions
  • {
  • Wait(Random Real(0.750, 1.250), Ignore Condition);
  • If(Global.TeleDelay != True);
  • If(Last Of(Filtered Array(Players Within Radius(Eye Position(Event Player), 30, Team 2, Surfaces), (Is Alive(Current Array Element)
  • == True && Has Spawned(Current Array Element) == True && Current Array Element.Down != True && True && True) == True)) == 0);
  • Wait(3, Abort When False);
  • If(Last Of(Filtered Array(Players Within Radius(Eye Position(Event Player), 30, Team 2, Surfaces), (Is Alive(Current Array Element)
  • == True && Has Spawned(Current Array Element) == True && Current Array Element.Down != True && True) == True)) == 0);
  • Event Player.TeleLimit = 0;
  • Global.TeleDelay = True;
  • While(Event Player.A == Null);
  • Wait(0.250, Abort When False);
  • Event Player.TeleLimit += 1000;
  • Event Player.SpecialTele = Random Value In Array(Filtered Array(All Players(Team 2), (Is Alive(Current Array Element)
  • == True && Has Spawned(Current Array Element) == True && Current Array Element.Down != True && True) == True));
  • Event Player.CheckPos = Ray Cast Hit Position(Eye Position(Event Player.SpecialTele), Vector(Random Integer(0, 1)
  • == 1 ? Random Real(10, 30) : Random Real(-30, -10), 0, Random Integer(0, 1) == 1 ? Random Real(10, 30) : Random Real(-30, -10))
  • + Eye Position(Event Player.SpecialTele), Empty Array, Empty Array, False) + Vector(0, 0, 0);
  • Event Player.CheckPos = Direction Towards(Event Player.CheckPos, Eye Position(Event Player.SpecialTele))
  • * 0.500 + Event Player.CheckPos;
  • Event Player.CheckPos2 = Event Player.CheckPos;
  • disabled Event Player.CheckPos2 = Event Player.CheckPos2 + Direction Towards(Event Player.CheckPos2, Event Player.CheckPos) * 1;
  • If(((0 == 1 || (Event Player.TeleLimit > 999 && Is True For Any(All Players(Team 2), Distance Between(Nearest Walkable Position(
  • Event Player.CheckPos2), Current Array Element) < 7) != True)) == True && Distance Between(Event Player.CheckPos2,
  • Event Player.CheckPos2 + Vector(0, -10, 0)) > Distance Between(Event Player.CheckPos2, Ray Cast Hit Position(
  • Event Player.CheckPos2, Event Player.CheckPos2 + Vector(0, -10, 0), Empty Array, Empty Array, False)) + 0.100 && True)
  • == True);
  • disabled Set Status(Event Player, Null, Stunned, 2);
  • disabled Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Event Player, 10000);
  • disabled Play Effect(All Players(All Teams), Good Pickup Effect, Color(Red), Event Player, 1);
  • Event Player.Teleporting = True;
  • Teleport(Event Player, Nearest Walkable Position(Event Player.CheckPos2));
  • Set Status(Event Player, Null, Stunned, 2);
  • Set Invisible(Event Player, All);
  • Create Effect(All Players(All Teams), Smoke Sound, Color(White), Event Player, 10000, Visible To Position and Radius);
  • Event Player.Spawnfx2 = Last Created Entity;
  • Create Effect(All Players(All Teams), Cloud, Color(White), Position Of(Event Player) + Vector(0, Distance Between(Position Of(
  • Event Player), Eye Position(Event Player)) * 0.500, 0), 2, Visible To Position and Radius);
  • Event Player.Spawnfx = Last Created Entity;
  • Event Player.TeleLimit = 0;
  • Wait(0.016, Ignore Condition);
  • Set Status(Event Player, Null, Phased Out, 2);
  • Wait(2, Ignore Condition);
  • Set Invisible(Event Player, None);
  • If(Event Player.A == Null);
  • Start Throttle In Direction(Event Player, Direction Towards(Eye Position(Event Player), Event Player.CheckPos), 1, To World,
  • Replace existing throttle, Direction and Magnitude);
  • End;
  • Wait(0.500, Ignore Condition);
  • Destroy Effect(Event Player.Spawnfx);
  • Destroy Effect(Event Player.Spawnfx2);
  • Event Player.Teleporting = True;
  • Wait(1.500, Abort When False);
  • End;
  • End;
  • End;
  • End;
  • End;
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("New Enemy Camera")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Last Of(Filtered Array(All Players(Team 1), (Array Contains(Global.Spawned, Hero Of(Current Array Element)) != True && Is Alive(
  • Current Array Element) == True && Has Status(Current Array Element, Phased Out) != True && Array Contains(Global.BossList,
  • Current Array Element) == True && True) == True)) != 0;
  • Global.Camera == Null;
  • Global.Round > 0;
  • }
  • actions
  • {
  • Wait(1, Abort When False);
  • Set Status(All Players(Team 2), Null, Phased Out, 0.900);
  • Set Slow Motion(5);
  • Global.SpawnTarg = Last Of(Filtered Array(All Players(Team 1), (Array Contains(Global.Spawned, Hero Of(Current Array Element))
  • != True && Is Alive(Current Array Element) == True && Has Status(Current Array Element, Phased Out) != True && True) == True));
  • Wait(0.100, Ignore Condition);
  • Global.Camera = Ray Cast Hit Position(Eye Position(Global.SpawnTarg), World Vector Of(Vector(0, 1.250, 2), Global.SpawnTarg,
  • Rotation And Translation), Empty Array, Empty Array, False);
  • Global.CameraLook = Eye Position(Global.SpawnTarg);
  • Chase Global Variable At Rate(CameraLook, Eye Position(Global.SpawnTarg), 100, Destination and Rate);
  • Chase Global Variable At Rate(Camera, Ray Cast Hit Position(Eye Position(Global.SpawnTarg), World Vector Of(Vector(0, 1.250, 2),
  • Global.SpawnTarg, Rotation And Translation), Empty Array, Empty Array, False), 100, Destination and Rate);
  • Global.Spawned = Append To Array(Global.Spawned, Hero Of(Global.SpawnTarg));
  • If(Array Contains(Global.TroopList, Hero Of(Global.SpawnTarg)) == True);
  • Big Message(All Players(All Teams), Custom String("New enemy troop: {0} {1}", Global.SpawnTarg, Hero Icon String(Hero Of(
  • Global.SpawnTarg))));
  • Else If(Array Contains(Global.TankList, Hero Of(Global.SpawnTarg)) == True);
  • Big Message(All Players(All Teams), Custom String("New enemy minitank: {0} {1}", Global.SpawnTarg, Hero Icon String(Hero Of(
  • Global.SpawnTarg))));
  • Else If(Array Contains(Global.MinibossList, Hero Of(Global.SpawnTarg)) == True);
  • Big Message(All Players(All Teams), Custom String("New enemy miniboss: {0} {1}", Global.SpawnTarg, Hero Icon String(Hero Of(
  • Global.SpawnTarg))));
  • Else If(Array Contains(Global.BossList, Hero Of(Global.SpawnTarg)) == True);
  • Big Message(All Players(All Teams), Custom String("New enemy boss: {0} {1}", Global.SpawnTarg, Hero Icon String(Hero Of(
  • Global.SpawnTarg))));
  • End;
  • Small Message(All Players(All Teams), Global.SpawnText[Index Of Array Value(Global.SpawnKey, Hero Of(Global.SpawnTarg))]);
  • Wait(0.400, Ignore Condition);
  • Set Slow Motion(100);
  • Stop Chasing Global Variable(Camera);
  • Stop Chasing Global Variable(CameraLook);
  • Global.Camera = Null;
  • Global.CameraLook = Null;
  • Wait(3, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Text Arrays")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • Global.SpawnKey = Empty Array;
  • Global.SpawnText = Empty Array;
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Soldier: 76));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A basic enemy that shoots at things"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Reaper));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A deadly close range enemy"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Ashe));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("An enemy that throws dynamite"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Symmetra));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A dangerous ranged enemy that shoots exploding orbs"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Doomfist));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A slow disruptive minitank that's effective at close range"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Torbjörn));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A basic close range miniboss"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Widowmaker));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("An enemy that shoots from far away"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Brigitte));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("An enemy that has a barrier"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Zenyatta));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String(
  • "A supportive miniboss that increases the damage of other enemies"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Roadhog));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("The ultimate close range enemy"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Sombra));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A deadly close range troop"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Junkrat));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("An enemy that shoots bombs"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Winston));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String(
  • "A disruptive boss that enables other enemies by knocking players around"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Bastion));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("He does exactly what you would expect"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Pharah));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A flying enemy that's difficult to shoot down"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Lúcio));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A supportive miniboss that speeds up other enemies"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(D.Va));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("Don't let her get another mech!"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Genji));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A fast enemy that's good at attacking from odd angles"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(McCree));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A medium range minitank"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Sigma));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A boss with a very large effective range"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Moira));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String(
  • "An enemy that fires a relentless death beam that's very difficult to avoid"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Reinhardt));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String(
  • "A boss that uses his barrier and hammer to enable other enemies"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Mercy));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("It looks like she's just saying hello..."));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Hanzo));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("An enemy with significant damage but slow projectiles"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Mei));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A disruptive minitank that slows players and blocks damage"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Tracer));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("An enemy that teleports to attack from odd angles"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Wrecking Ball));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A rolling ball of death"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Orisa));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String(
  • "A supportive boss that damage boosts other enemies and launches everyone into the air"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Baptiste));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A ranged healer enemy"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Ana));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String(
  • "An enemy with projectiles that can heal other enemies or damage players"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Zarya));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String(
  • "A boss that pulls players close and has a powerful melee attack"));
  • Global.SpawnKey = Append To Array(Global.SpawnKey, Hero(Echo));
  • Global.SpawnText = Append To Array(Global.SpawnText, Custom String("A close range flying enemy"));
  • Global.ModDescriptions = Append To Array(Append To Array(Append To Array(Append To Array(Append To Array(Append To Array(
  • Append To Array(Append To Array(Append To Array(Empty Array, Custom String("No modifier selected")), Custom String(
  • "Lower your damage and healing for significantly increased health and easier to trigger damage stuns")), Custom String(
  • "Lower your health for significantly increased damage and healing")), Custom String(
  • "Heal yourself by damaging enemies and healing teammates")), Custom String(
  • "Reduce your health and damage slightly to move faster")), Custom String(
  • "Move slower, but gain more health, damage, and healing")), Custom String(
  • "Explode when you die, significantly damaging all enemies around you")), Custom String(
  • "Jump higher and stay in the air longer")), Custom String(
  • "Deal damage over time or healing over time to everything you interact with"));
  • disabled Global.ModDescriptions = Append To Array(Append To Array(Append To Array(Append To Array(Append To Array(Append To Array(
  • Append To Array(Append To Array(Append To Array(Empty Array, Custom String("No modifier selected")), Custom String(
  • "Lower your damage and healing for significantly increased health and easier to trigger damage stuns\r\nWhen upgraded it allows you")),
  • Custom String(
  • "Lower your health for significantly increased damage and healing\r\nWhen upgraded it also reduces your cooldowns")),
  • Custom String(
  • "Heal yourself by damaging enemies and healing teammates\r\nWhen upgraded it heals everyone around you as well")),
  • Custom String("Reduce your health and damage slightly to move faster\r\nWhen upgraded it gives you new movement abilities")),
  • Custom String(
  • "Move slower, but gain more health, damage, and healing\r\nWhen upgraded it grants resistance to knockback and stuns")),
  • Custom String(
  • "Explode when you die, significantly damaging all enemies around you\r\nWhen upgraded the explosion also heals allies")),
  • Custom String(
  • "Jump higher and stay in the air longer\r\nWhen upgraded it allows you to carry other players and jump in the air multiple times")),
  • Custom String(
  • "Deal damage over time or healing over time to everything you interact with\r\nWhen upgraded affected players and enemies can sprea"));
  • Global.ModNames = Append To Array(Append To Array(Append To Array(Append To Array(Append To Array(Append To Array(Append To Array(
  • Append To Array(Append To Array(Empty Array, Custom String("Normal")), Custom String("{0} Durable", Ability Icon String(Hero(
  • Brigitte), Button(Secondary Fire)))), Custom String("{0} Deadly", Icon String(Skull))), Custom String("{0} Life Steal",
  • Icon String(Spiral))), Custom String("{0} Fast", Icon String(Ring Thin))), Custom String("{0} Strong", Icon String(Bolt))),
  • Custom String("{0} Exploding", Icon String(Radioactive))), Custom String("{0} Floating", Ability Icon String(Hero(Mercy),
  • Button(Ability 1)))), Custom String("{0} Burning", Icon String(Fire)));
  • }
  • }
  • rule("Create Mod HUD")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Dummy Bot(Event Player) != True;
  • Global.PlayerMods == True;
  • }
  • actions
  • {
  • If(Has Spawned(Event Player) != True);
  • Wait(1, Ignore Condition);
  • Loop;
  • End;
  • Wait(Random Real(0, 2), Ignore Condition);
  • Set Status(Event Player, Null, Invincible, 22.250);
  • Set Move Speed(Event Player, 1);
  • Disallow Button(Event Player, Button(Primary Fire));
  • Disallow Button(Event Player, Button(Secondary Fire));
  • Disallow Button(Event Player, Button(Ability 1));
  • Disallow Button(Event Player, Button(Ability 2));
  • Disallow Button(Event Player, Button(Ultimate));
  • Disallow Button(Event Player, Button(Melee));
  • Event Player.ModHUDs = Empty Array;
  • Create HUD Text(Event Player, Custom String(
  • "Permanent modifiers have been unlocked! Select a modifier for yourself by moving and confirm it with your primary fire"),
  • Null, Null, Top, 1, Color(White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} Durable", Ability Icon String(Hero(Brigitte), Button(Secondary Fire))),
  • Event Player.SelectText[1], Null, Top, 2, Color(Sky Blue), Color(White), Color(White), Visible To and String,
  • Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} Deadly", Icon String(Skull)), Event Player.SelectText[2], Null, Top, 3, Color(
  • Red), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} Life Steal", Icon String(Spiral)), Event Player.SelectText[3], Null, Top, 4,
  • Color(Purple), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} Fast", Icon String(Ring Thin)), Event Player.SelectText[4], Null, Top, 5, Color(
  • Green), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} Strong", Icon String(Bolt)), Event Player.SelectText[5], Null, Top, 6, Color(
  • White), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} Exploding", Icon String(Radioactive)), Event Player.SelectText[6], Null, Top, 7,
  • Color(Red), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} Floating", Ability Icon String(Hero(Mercy), Button(Ability 1))),
  • Event Player.SelectText[7], Null, Top, 8, Color(Orange), Color(White), Color(White), Visible To and String,
  • Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Create HUD Text(Event Player, Custom String("{0} Burning", Icon String(Fire)), Event Player.SelectText[8], Null, Top, 9, Color(
  • Red), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Create HUD Text(Event Player, Global.ModDescriptions[Event Player.ModChoice], Null, Null, Top, 10, Color(White), Color(White),
  • Color(White), Visible To and String, Default Visibility);
  • Event Player.ModHUDs = Append To Array(Event Player.ModHUDs, Last Text ID);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Event Player.ModChoice = Random Integer(1, 8);
  • Event Player.SelectText = Empty Array;
  • For Player Variable(Event Player, ModListLoop, 0, 9, 1);
  • If(Event Player.ModChoice == Event Player.ModListLoop);
  • Event Player.SelectText = Append To Array(Event Player.SelectText, Custom String("<--"));
  • Else;
  • Event Player.SelectText = Append To Array(Event Player.SelectText, Custom String("-"));
  • End;
  • End;
  • Wait(20, Ignore Condition);
  • Event Player.ModsPicked = True;
  • }
  • }
  • rule("Select Mod Up")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.ModChoice > 0;
  • Z Component Of(Throttle Of(Event Player)) > 0.500;
  • }
  • actions
  • {
  • Play Effect(Event Player, DVa Micro Missiles Explosion Sound, Color(White), Eye Position(Event Player), 60);
  • If(-1 + Event Player.ModChoice >= 1);
  • Event Player.ModChoice += -1;
  • Else;
  • Event Player.ModChoice = 8;
  • End;
  • Event Player.SelectText = Empty Array;
  • For Player Variable(Event Player, ModListLoop, 0, 9, 1);
  • If(Event Player.ModChoice == Event Player.ModListLoop);
  • Event Player.SelectText = Append To Array(Event Player.SelectText, Custom String("<--"));
  • Else;
  • Event Player.SelectText = Append To Array(Event Player.SelectText, Custom String("-"));
  • End;
  • End;
  • }
  • }
  • rule("Select Mod Down")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.ModChoice > 0;
  • Z Component Of(Throttle Of(Event Player)) < -0.500;
  • }
  • actions
  • {
  • Play Effect(Event Player, DVa Micro Missiles Explosion Sound, Color(White), Eye Position(Event Player), 60);
  • If(1 + Event Player.ModChoice <= 8);
  • Event Player.ModChoice += 1;
  • Else;
  • Event Player.ModChoice = 1;
  • End;
  • Event Player.SelectText = Empty Array;
  • For Player Variable(Event Player, ModListLoop, 0, 9, 1);
  • If(Event Player.ModChoice == Event Player.ModListLoop);
  • Event Player.SelectText = Append To Array(Event Player.SelectText, Custom String("<--"));
  • Else;
  • Event Player.SelectText = Append To Array(Event Player.SelectText, Custom String("-"));
  • End;
  • End;
  • }
  • }
  • rule("Select Mod")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.ModChoice > 0;
  • (Event Player.ModsPicked == True || Is Button Held(Event Player, Button(Primary Fire)) == True) == True;
  • }
  • actions
  • {
  • Play Effect(Event Player, Wrecking Ball Minefield Explosion Sound, Color(White), Eye Position(Event Player), 75);
  • Set Move Speed(Event Player, 100);
  • Allow Button(Event Player, Button(Primary Fire));
  • Allow Button(Event Player, Button(Secondary Fire));
  • Allow Button(Event Player, Button(Ability 1));
  • Allow Button(Event Player, Button(Ability 2));
  • Allow Button(Event Player, Button(Ultimate));
  • Allow Button(Event Player, Button(Melee));
  • Event Player.SpecialType = Event Player.ModChoice;
  • Event Player.ModChoice = 0;
  • Small Message(Event Player, Custom String("The {0} modifier has been applied!", Global.ModNames[Event Player.SpecialType]));
  • Destroy HUD Text(Event Player.ModHUDs[9]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Destroy HUD Text(Event Player.ModHUDs[8]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Destroy HUD Text(Event Player.ModHUDs[7]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Destroy HUD Text(Event Player.ModHUDs[6]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Destroy HUD Text(Event Player.ModHUDs[5]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Destroy HUD Text(Event Player.ModHUDs[4]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Destroy HUD Text(Event Player.ModHUDs[3]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Destroy HUD Text(Event Player.ModHUDs[2]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Destroy HUD Text(Event Player.ModHUDs[1]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Wait(0.250, Ignore Condition);
  • Destroy HUD Text(Event Player.ModHUDs[0]);
  • Play Effect(Event Player, Brigitte Repair Pack Armor Sound, Color(White), Eye Position(Event Player), 50);
  • Clear Status(Event Player, Invincible);
  • }
  • }
  • rule("Fake Rez")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • Mercy;
  • }
  • conditions
  • {
  • Hero Of(Event Player) == Hero(Mercy);
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • Event Player.Down != True;
  • Ability Cooldown(Event Player, Button(Ability 2)) < 1;
  • Is Button Held(Event Player, Button(Ability 2)) == True;
  • Player Closest To Reticle(Event Player, Team 2).Down == True;
  • Player Closest To Reticle(Event Player, Team 2) != Event Player;
  • Distance Between(Event Player, Player Closest To Reticle(Event Player, Team 2)) < 3;
  • }
  • actions
  • {
  • Play Effect(All Players(All Teams), Good Explosion, Color(Yellow), Player Closest To Reticle(Event Player, Team 2), 1);
  • Play Effect(All Players(All Teams), Buff Explosion Sound, Color(Yellow), Player Closest To Reticle(Event Player, Team 2), 1000);
  • Player Closest To Reticle(Event Player, Team 2).Down = False;
  • Resurrect(Player Closest To Reticle(Event Player, Team 2));
  • Set Ability Cooldown(Event Player, Button(Ability 2), 30);
  • Small Message(Event Player, Custom String("Revived {0} {1}", Player Closest To Reticle(Event Player, Team 2), Hero Icon String(
  • Hero Of(Player Closest To Reticle(Event Player, Team 2)))));
  • }
  • }
  • rule("Switching Heroes")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Event Player.Down != True;
  • Is Alive(Event Player) == True;
  • Global.CanSwap == True;
  • }
  • actions
  • {
  • If(Event Player.FloatTarg != Null);
  • Event Player.FloatTarg = Null;
  • Wait(0.016, Ignore Condition);
  • End;
  • Set Player Allowed Heroes(Event Player, Filtered Array(All Heroes, Hero Of(Event Player) != Current Array Element));
  • Wait(1, Ignore Condition);
  • Reset Player Hero Availability(Event Player);
  • }
  • }
  • rule("Final Boss Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 998;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • "Enemies with the final boss modifier have greatly improved stats. Enemies with this modifier are much larger and have an asterisk icon."
  • Skip If(Global.J != 1, 2);
  • Set Max Health(Event Player, 200);
  • Set Damage Dealt(Event Player, 60);
  • Skip If(Global.J != 2, 2);
  • Set Max Health(Event Player, 300);
  • Set Damage Dealt(Event Player, 85);
  • Skip If(Global.J != 3, 2);
  • Set Max Health(Event Player, 400);
  • Set Damage Dealt(Event Player, 95);
  • Wait(0.100, Ignore Condition);
  • disabled Create Effect(All Players(All Teams), Good Aura, Color(Sky Blue), Event Player, 1, Visible To Position and Radius);
  • disabled Event Player.SpecialEffect = Last Created Entity;
  • Start Scaling Player(Event Player, 2.500, True);
  • Start Modifying Hero Voice Lines(Event Player, 0.600, True);
  • Wait(0.100, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Icon String(Asterisk), Event Player, 1, Clip Against Surfaces,
  • Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Super Secret Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 999;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • "A rare secret modifier!"
  • Create Effect(All Players(All Teams), Sparkles, Color(White), Event Player, 1, Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Create In-World Text(All Players(All Teams), Icon String(Heart), Event Player, 1, Clip Against Surfaces,
  • Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Apply Secret Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.SpecialType == 999;
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Set Primary Fire Enabled(Event Player, False);
  • Set Secondary Fire Enabled(Event Player, False);
  • Set Ability 1 Enabled(Event Player, False);
  • Set Ability 2 Enabled(Event Player, False);
  • Set Ultimate Ability Enabled(Event Player, False);
  • Set Damage Dealt(Event Player, 0);
  • Event Player.Range = 2.500;
  • End;
  • End;
  • }
  • }
  • rule("Apply Secret Modifier 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.SpecialType == 999;
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Communicate(Event Player, Hello);
  • Wait(Random Real(3, 6), Ignore Condition);
  • Loop If Condition Is True;
  • End;
  • End;
  • }
  • }
  • rule("Apply Secret Modifier 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.SpecialType == 999;
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.A != Null;
  • Is Communicating(Event Player.A, Hello) == True;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Set Status(Event Player, Null, Phased Out, 10);
  • Wait(Random Real(0.750, 1.200), Ignore Condition);
  • Start Holding Button(Event Player, Button(Crouch));
  • Wait(Random Real(0.200, 0.300), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Wait(Random Real(0.200, 0.300), Ignore Condition);
  • Start Holding Button(Event Player, Button(Crouch));
  • Wait(Random Real(0.200, 0.300), Ignore Condition);
  • Stop Holding Button(Event Player, Button(Crouch));
  • Wait(1.500, Ignore Condition);
  • Play Effect(All Players(All Teams), Good Explosion, Color(White), Event Player, 2);
  • Play Effect(All Players(All Teams), Buff Impact Sound, Color(White), Event Player, 10000);
  • Wait(0.500, Ignore Condition);
  • Destroy Dummy Bot(Team 1, Slot Of(Event Player));
  • End;
  • End;
  • }
  • }
  • rule("Apply Life Steal Modifier")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • disabled Has Spawned(Event Player) == True;
  • disabled Event Player.SpecialType == 3;
  • }
  • actions
  • {
  • If(Event Player.SpecialType == 3);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Has Spawned(Event Player) == True);
  • Heal(Event Player, Null, Event Damage);
  • End;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Apply Exploding Modifier")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Event Player.SpecialType == 6;
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • disabled Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • If(Event Player.SpecialType == 6);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Has Spawned(Event Player) == True);
  • If(Global.J == 1);
  • Damage(Players Within Radius(Eye Position(Event Player), 7, Team 2, Surfaces And Enemy Barriers), Null, 25);
  • Else If(Global.J == 2);
  • Damage(Players Within Radius(Eye Position(Event Player), 7, Team 2, Surfaces And Enemy Barriers), Null, 50);
  • Else;
  • Damage(Players Within Radius(Eye Position(Event Player), 7, Team 2, Surfaces And Enemy Barriers), Null, 75);
  • End;
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Orange), Event Player, 2);
  • Play Effect(All Players(All Teams), Pharah Rocket Launcher Explosion Sound, Color(White), Position Of(Event Player), 125);
  • End;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Apply Floating Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.SpecialType == 7;
  • Is Dummy Bot(Event Player) == True;
  • Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Press Button(Event Player, Button(Jump));
  • Wait(5, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Apply Burning Modifier")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • disabled Has Spawned(Event Player) == True;
  • disabled Event Player.SpecialType == 8;
  • disabled Has Status(Victim, Burning) != True;
  • }
  • actions
  • {
  • If(Event Player.SpecialType == 8);
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • If(Has Spawned(Event Player) == True);
  • disabled If(Event Ability != Null);
  • Victim.DmgBurn = 2;
  • disabled Skip If(Global.J != 1, 1);
  • disabled Start Damage Over Time(Victim, Null, 2, 10);
  • disabled Skip If(Global.J != 2, 1);
  • disabled Start Damage Over Time(Victim, Null, 2, 15);
  • disabled Skip If(Global.J != 3, 1);
  • disabled Start Damage Over Time(Victim, Null, 2, 20);
  • disabled End;
  • End;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Durable Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 1;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • "Enemies with the durable modifier have more health and less damage. Enemies with this modifier have a blue aura and a circle icon."
  • Skip If(Global.J != 1, 2);
  • Set Max Health(Event Player, 75);
  • Set Damage Dealt(Event Player, 25);
  • Skip If(Global.J != 2, 2);
  • Set Max Health(Event Player, 97);
  • Set Damage Dealt(Event Player, 37.500);
  • Skip If(Global.J != 3, 2);
  • Set Max Health(Event Player, 150);
  • Set Damage Dealt(Event Player, 56);
  • Wait(0.100, Ignore Condition);
  • disabled Create Effect(All Players(All Teams), Good Aura, Color(Sky Blue), Event Player, 1, Visible To Position and Radius);
  • disabled Event Player.SpecialEffect = Last Created Entity;
  • Start Scaling Player(Event Player, 1.350, True);
  • Start Modifying Hero Voice Lines(Event Player, 0.750, True);
  • Wait(0.100, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Brigitte), Button(Secondary Fire)), Event Player, 1,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Deadly Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 2;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • "Enemies with the deadly modifier have more damage and less health. Enemies with this modifier have red sparkles and a skull icon."
  • Skip If(Global.J != 1, 2);
  • Set Max Health(Event Player, 25);
  • Set Damage Dealt(Event Player, 44);
  • Skip If(Global.J != 2, 2);
  • Set Max Health(Event Player, 33);
  • Set Damage Dealt(Event Player, 66);
  • Skip If(Global.J != 3, 2);
  • Set Max Health(Event Player, 50);
  • Set Damage Dealt(Event Player, 100);
  • Wait(0.100, Ignore Condition);
  • disabled Create Effect(All Players(All Teams), Sparkles, Color(Red), Event Player, 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Winston Primal Rage Effect, Team Of(Event Player), Event Player, 1,
  • Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Icon String(Skull), Event Player, 1, Clip Against Surfaces,
  • Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Life Steal Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 3;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(0.100, Ignore Condition);
  • "Life Steal enemies heal when they do damage. They have a purple vortex with a spiral icon."
  • disabled Create Effect(All Players(All Teams), Bad Aura, Color(Purple), Event Player, 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Reaper Wraith Form Effect, Team Of(Event Player), Event Player, 1,
  • Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Icon String(Spiral), Event Player, 1, Clip Against Surfaces,
  • Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Fast Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 4;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • "Enemies with the fast modifier have less health and damage, but move faster. Enemies with this modifier have green sparkles and a ring icon."
  • Skip If(Global.J != 1, 2);
  • Set Max Health(Event Player, 38);
  • Set Damage Dealt(Event Player, 25);
  • Skip If(Global.J != 2, 2);
  • Set Max Health(Event Player, 49);
  • Set Damage Dealt(Event Player, 37.500);
  • Skip If(Global.J != 3, 2);
  • Set Max Health(Event Player, 75);
  • Set Damage Dealt(Event Player, 56);
  • Set Move Speed(Event Player, 150);
  • Wait(0.100, Ignore Condition);
  • disabled Create Effect(All Players(All Teams), Sparkles, Color(Green), Event Player, 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Soldier: 76 Sprinting Effect, Team Of(Event Player), Event Player, 1,
  • Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Icon String(Ring Thin), Event Player, 1, Clip Against Surfaces,
  • Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Strong Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 5;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • "Enemies with the strong modifier have more health and damage, but move slower. Enemies with this modifier have a white aura and a bolt icon."
  • Skip If(Global.J != 1, 2);
  • Set Max Health(Event Player, 63);
  • Set Damage Dealt(Event Player, 41);
  • Skip If(Global.J != 2, 2);
  • Set Max Health(Event Player, 82);
  • Set Damage Dealt(Event Player, 62);
  • Skip If(Global.J != 3, 2);
  • Set Max Health(Event Player, 125);
  • Set Damage Dealt(Event Player, 94);
  • Set Move Speed(Event Player, 85);
  • Wait(0.100, Ignore Condition);
  • disabled Create Effect(All Players(All Teams), Good Aura, Color(White), Event Player, 1, Visible To Position and Radius);
  • disabled Event Player.SpecialEffect = Last Created Entity;
  • Start Scaling Player(Event Player, 1.100, True);
  • Start Modifying Hero Voice Lines(Event Player, 0.900, True);
  • Wait(0.100, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Icon String(Bolt), Event Player, 1, Clip Against Surfaces,
  • Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Exploding Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 6;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(0.100, Ignore Condition);
  • "Exploding enemies do damage in an area when they die. They have a red aura with a radioactive icon."
  • disabled Create Effect(All Players(All Teams), Good Aura, Color(Red), Event Player, 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Torbjörn Overloading Effect, Team Of(Event Player), Event Player, 1,
  • Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Icon String(Radioactive), Event Player, 1, Clip Against Surfaces,
  • Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Floating Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 7;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • Wait(0.100, Ignore Condition);
  • "Floating enemies jump and stay in the air for a while. They have orange sparkles with a GA icon."
  • disabled Create Effect(All Players(All Teams), Sparkles, Color(Orange), Event Player, 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Sigma Gravitic Flux Target Effect, Team Of(Event Player), Event Player, 1,
  • Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Ability Icon String(Hero(Mercy), Button(Ability 1)), Event Player, 1,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Set Gravity(Event Player, 25);
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Burning Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Is Dummy Bot(Event Player) == True;
  • disabled Team Of(Event Player) == Team 1;
  • Has Spawned(Event Player) == True;
  • Event Player.SpecialType == 8;
  • }
  • actions
  • {
  • If(Is Dummy Bot(Event Player) == True);
  • If(Team Of(Event Player) == Team 1);
  • "Burning Enemies apply a burning damage over time when they deal damage and have slightly lower stats. They have a red cloud with a fire icon."
  • disabled Create Effect(All Players(All Teams), Cloud, Color(Red), Event Player, 1, Visible To Position and Radius);
  • Create Effect(All Players(All Teams), Ashe Dynamite Burning Particle Effect, Team Of(Event Player), Event Player, 1,
  • Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Wait(0.100, Ignore Condition);
  • Create In-World Text(All Players(All Teams), Icon String(Fire), Event Player, 1, Clip Against Surfaces,
  • Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.100, Ignore Condition);
  • Skip If(Global.J != 1, 2);
  • Set Max Health(Event Player, 38);
  • Set Damage Dealt(Event Player, 25);
  • Skip If(Global.J != 2, 2);
  • Set Max Health(Event Player, 49);
  • Set Damage Dealt(Event Player, 37.500);
  • Skip If(Global.J != 3, 2);
  • Set Max Health(Event Player, 75);
  • Set Damage Dealt(Event Player, 56);
  • Wait(0.100, Ignore Condition);
  • Heal(Event Player, Null, 100000);
  • End;
  • End;
  • }
  • }
  • rule("Apply Player Durable Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Team Of(Event Player) == Team 2;
  • Event Player.SpecialType == 1;
  • }
  • actions
  • {
  • Set Max Health(Event Player, Is Dummy Bot(Event Player) == True ? 150 : 200);
  • Set Damage Dealt(Event Player, 65);
  • Set Healing Dealt(Event Player, 75);
  • Add Health Pool To Player(Event Player, Armor, Array Contains(All Tank Heroes, Hero Of(Event Player)) != True ? 100 : 25, True,
  • True);
  • Event Player.DurableHP = Last Created Health Pool;
  • disabled Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Good Aura, Color(Sky Blue), Event Player, 1,
  • Visible To Position and Radius);
  • disabled Event Player.SpecialEffect = Last Created Entity;
  • Start Scaling Player(Event Player, 1.350, True);
  • Start Modifying Hero Voice Lines(Event Player, 0.750, True);
  • Create In-World Text(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Ability Icon String(Hero(Brigitte),
  • Button(Secondary Fire)), Event Player, 1, Clip Against Surfaces, Visible To Position and String, Color(White),
  • Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • }
  • }
  • rule("Apply Player Deadly Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Team Of(Event Player) == Team 2;
  • Event Player.SpecialType == 2;
  • }
  • actions
  • {
  • Set Max Health(Event Player, 62.500);
  • Set Damage Dealt(Event Player, 175);
  • Set Healing Dealt(Event Player, 175);
  • disabled Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Sparkles, Color(Red), Event Player, 1,
  • Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Winston Primal Rage Effect, Team Of(
  • Event Player), Event Player, 1, Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Create In-World Text(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Icon String(Skull), Event Player, 1,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • }
  • }
  • rule("Apply Player Life Steal Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Team Of(Event Player) == Team 2;
  • Event Player.SpecialType == 3;
  • }
  • actions
  • {
  • disabled Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Bad Aura, Color(Purple), Event Player, 1,
  • Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Reaper Wraith Form Effect, Team Of(
  • Event Player), Event Player, 1, Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Create In-World Text(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Icon String(Spiral), Event Player, 1,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • }
  • }
  • rule("Activate Player Life Steal Modifier")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • disabled Team Of(Event Player) == Team 2;
  • disabled Event Player.SpecialType == 3;
  • disabled Attacker != Victim;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 2);
  • If(Event Player.SpecialType == 3);
  • If(Attacker != Victim);
  • Heal(Event Player, Null, Event Damage * 0.500);
  • If(Global.UpgradedMods == True);
  • Heal(Filtered Array(Players Within Radius(Eye Position(Event Player), 6, Team 2, Surfaces), Current Array Element != Event Player),
  • Null, Event Damage * 0.350);
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Purple), Event Player, 1);
  • End;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Activate Player Life Steal Modifier 2")
  • {
  • event
  • {
  • Player Dealt Healing;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • disabled Team Of(Event Player) == Team 2;
  • disabled Event Player.SpecialType == 3;
  • disabled Healer != Healee;
  • disabled Event Healing > 0;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 2);
  • If(Event Player.SpecialType == 3);
  • If(Healer != Healee);
  • If(Event Healing > 0);
  • Heal(Event Player, Null, Event Healing * 0.500);
  • disabled If(Global.UpgradedMods == True);
  • disabled Heal(Filtered Array(Players Within Radius(Eye Position(Event Player), 6, Team 2, Surfaces), Current Array Element != Event Player),
  • Null, Event Healing * 0.350);
  • disabled Play Effect(All Players(All Teams), Bad Explosion, Color(Purple), Event Player, 1);
  • disabled End;
  • End;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Apply Player Fast Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Team Of(Event Player) == Team 2;
  • Event Player.SpecialType == 4;
  • }
  • actions
  • {
  • Set Max Health(Event Player, 87.500);
  • Set Damage Dealt(Event Player, 87.500);
  • Set Healing Dealt(Event Player, 87.500);
  • disabled Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Sparkles, Color(Green), Event Player, 1,
  • Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Soldier: 76 Sprinting Effect, Team Of(
  • Event Player), Event Player, 1, Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Create In-World Text(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Icon String(Ring Thin), Event Player,
  • 1, Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.250, Ignore Condition);
  • Set Move Speed(Event Player, 150);
  • }
  • }
  • rule("Apply Player Strong Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Team Of(Event Player) == Team 2;
  • Event Player.SpecialType == 5;
  • }
  • actions
  • {
  • Set Max Health(Event Player, 150);
  • Set Damage Dealt(Event Player, 125);
  • Set Healing Dealt(Event Player, 125);
  • disabled Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Good Aura, Color(White), Event Player, 1,
  • Visible To Position and Radius);
  • disabled Event Player.SpecialEffect = Last Created Entity;
  • Start Scaling Player(Event Player, 1.100, True);
  • Start Modifying Hero Voice Lines(Event Player, 0.900, True);
  • Create In-World Text(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Icon String(Bolt), Event Player, 1,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • Wait(0.250, Ignore Condition);
  • Set Move Speed(Event Player, 75);
  • }
  • }
  • rule("Apply Player Exploding Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Team Of(Event Player) == Team 2;
  • Event Player.SpecialType == 6;
  • }
  • actions
  • {
  • disabled Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Good Aura, Color(Red), Event Player, 1,
  • Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Torbjörn Overloading Effect, Team Of(
  • Event Player), Event Player, 1, Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Create In-World Text(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Icon String(Radioactive),
  • Event Player, 1, Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • }
  • }
  • rule("Activate Player Exploding Modifier")
  • {
  • event
  • {
  • Player Died;
  • All;
  • All;
  • }
  • conditions
  • {
  • disabled Team Of(Event Player) == Team 2;
  • disabled Event Player.SpecialType == 6;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 2);
  • If(Event Player.SpecialType == 6);
  • Damage(Players Within Radius(Eye Position(Event Player), 20, Team 1, Surfaces And Enemy Barriers), Event Player, 1500);
  • If(Global.UpgradedMods == True);
  • Heal(Players Within Radius(Eye Position(Event Player), 20, Team 2, Surfaces), Null, 1000);
  • End;
  • Play Effect(All Players(All Teams), Bad Explosion, Color(Orange), Event Player, 4);
  • Play Effect(All Players(All Teams), DVa Self Destruct Explosion Sound, Color(White), Position Of(Event Player), 135);
  • End;
  • End;
  • }
  • }
  • rule("Apply Player Floating Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Team Of(Event Player) == Team 2;
  • Event Player.SpecialType == 7;
  • }
  • actions
  • {
  • Set Gravity(Event Player, 20);
  • disabled Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Sparkles, Color(Orange), Event Player, 1,
  • Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Sigma Gravitic Flux Target Effect, Team Of(
  • Event Player), Event Player, 1, Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Create In-World Text(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Ability Icon String(Hero(Mercy),
  • Button(Ability 1)), Event Player, 1, Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • }
  • }
  • rule("Apply Player Burning Modifier")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Team Of(Event Player) == Team 2;
  • Event Player.SpecialType == 8;
  • }
  • actions
  • {
  • Set Max Health(Event Player, 87.500);
  • Set Damage Dealt(Event Player, 87.500);
  • Set Healing Dealt(Event Player, 87.500);
  • disabled Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Cloud, Color(Red), Event Player, 1,
  • Visible To Position and Radius);
  • Create Effect(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Ashe Dynamite Burning Particle Effect,
  • Team Of(Event Player), Event Player, 1, Visible To Position and Radius);
  • Event Player.SpecialEffect = Last Created Entity;
  • Create In-World Text(Filtered Array(All Players(All Teams), Is Alive(Event Player) == True), Icon String(Fire), Event Player, 1,
  • Clip Against Surfaces, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.SpecialIcon = Last Text ID;
  • }
  • }
  • rule("Activate Player Burning Modifier")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • disabled Team Of(Event Player) == Team 2;
  • disabled Event Player.SpecialType == 8;
  • disabled Has Status(Victim, Burning) != True;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 2);
  • If(Event Player.SpecialType == 8);
  • disabled If(Event Ability != Null);
  • disabled Set Status(Victim, Null, Burning, 2);
  • Victim.DmgBurn = 2;
  • If(Global.UpgradedMods == True);
  • Victim.BurnOrigin = Event Player;
  • End;
  • disabled End;
  • End;
  • End;
  • }
  • }
  • rule("Activate Player Burning Modifier 2")
  • {
  • event
  • {
  • Player Dealt Healing;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • disabled Team Of(Event Player) == Team 2;
  • disabled Event Player.SpecialType == 8;
  • disabled Has Status(Healee, Burning) != True;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 2);
  • If(Event Player.SpecialType == 8);
  • disabled If(Event Ability != Null);
  • Healee.HealPl = Event Player;
  • Healee.HealBurn = 2;
  • If(Global.UpgradedMods == True);
  • Healee.BurnOrigin = Event Player;
  • End;
  • disabled End;
  • End;
  • End;
  • }
  • }
  • rule("Clear Burning Spread Variable")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.BurnOrigin != Null;
  • (Event Player.DmgBurn <= 0 && Event Player.HealBurn <= 0) == True;
  • }
  • actions
  • {
  • Event Player.BurnOrigin = Null;
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Unlock Durable Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 1;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Your modifier has been upgraded!"));
  • Create Beam Effect(Filtered Array(All Players(All Teams), (Event Player.LifeLink != Null && True) == True), Good Beam,
  • Event Player, Event Player.LifeLink, Color(Sky Blue), Visible To Position and Radius);
  • Event Player.LinkBeam = Last Created Entity;
  • Create HUD Text(Event Player.LifeLink, Custom String("Health Linked to {0} {1}: {2}", Event Player, Hero Icon String(Hero Of(
  • Event Player)), Custom String("{0}/{1} Health", Round To Integer(Health(Event Player), Up), Round To Integer(Max Health(
  • Event Player), Up))), Null, Null, Top, 10, Color(Sky Blue), Color(White), Color(White), Visible To and String,
  • Default Visibility);
  • Event Player.LinkHUD = Last Text ID;
  • Create HUD Text(Filtered Array(Append To Array(Empty Array, Event Player), Event Player.LifeLink != Null), Custom String(
  • "Using Health Link on {0} {1}", Event Player.LifeLink, Hero Icon String(Hero Of(Event Player.LifeLink))), Null, Null, Top, 10,
  • Color(Sky Blue), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.LinkHUD2 = Last Text ID;
  • Create HUD Text(Filtered Array(Append To Array(Empty Array, Event Player), Event Player.LifeLink == Null), Custom String(
  • "Your Health Link is inactive! Press Interact while looking at a teammate to use it.", Event Player.LifeLink, Hero Icon String(
  • Hero Of(Event Player.LifeLink))), Null, Null, Top, 10, Color(Sky Blue), Color(White), Color(White), Visible To and String,
  • Default Visibility);
  • Event Player.LinkHUD3 = Last Text ID;
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String(
  • "Press Interact to link your health to another player! When they take damage the damage will be transferred to you instead!"));
  • }
  • }
  • rule("Apply Durable Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 1;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • disabled Is Alive(Event Player) == True;
  • disabled Has Status(Event Player, Stunned) != True;
  • disabled Has Status(Event Player, Knocked Down) != True;
  • disabled Has Status(Event Player, Frozen) != True;
  • disabled Has Status(Event Player, Rooted) != True;
  • disabled Event Player.Down != True;
  • disabled Is Alive(Player Closest To Reticle(Event Player, Team 2)) == True;
  • disabled Player Closest To Reticle(Event Player, Team 2) != Event Player;
  • disabled Player Closest To Reticle(Event Player, Team 2).LifeLink != Event Player;
  • disabled Array Contains(Players Within Radius(Eye Position(Event Player), 30, Team 2, Surfaces), Player Closest To Reticle(Event Player,
  • Team 2)) == True;
  • }
  • actions
  • {
  • If(Is Alive(Event Player) == True);
  • If(Has Status(Event Player, Stunned) != True);
  • If(Has Status(Event Player, Knocked Down) != True);
  • If(Has Status(Event Player, Frozen) != True);
  • If(Has Status(Event Player, Rooted) != True);
  • If(Event Player.Down != True);
  • If(Is Alive(Player Closest To Reticle(Event Player, Team 2)) == True);
  • If(Player Closest To Reticle(Event Player, Team 2) != Event Player);
  • If(Player Closest To Reticle(Event Player, Team 2).LifeLink != Event Player);
  • If(Array Contains(Players Within Radius(Eye Position(Event Player), 30, Team 2, Surfaces), Player Closest To Reticle(Event Player,
  • Team 2)) == True);
  • If(Player Closest To Reticle(Event Player, Team 2) == Event Player.LifeLink);
  • Event Player.LifeLink = Null;
  • Else;
  • If((Max Health(Player Closest To Reticle(Event Player, Team 2)) + Health(Player Closest To Reticle(Event Player, Team 2)) * -1)
  • * 1 < Health(Event Player));
  • Event Player.LifeLink = Player Closest To Reticle(Event Player, Team 2);
  • Else;
  • Small Message(Event Player, Custom String("{0} {1} has taken more damage than your current health!", Player Closest To Reticle(
  • Event Player, Team 2), Hero Icon String(Hero Of(Player Closest To Reticle(Event Player, Team 2)))));
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • Wait(1, Ignore Condition);
  • }
  • }
  • rule("Apply Durable Upgrade 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 1;
  • Normalized Health(Event Player.LifeLink) < 0.990;
  • }
  • actions
  • {
  • Damage(Event Player, Null, (Max Health(Event Player.LifeLink) + Health(Event Player.LifeLink) * -1) * 1);
  • Heal(Event Player.LifeLink, Null, 100000);
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Apply Durable Upgrade 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 1;
  • Has Status(Event Player.LifeLink, Unkillable) != True;
  • }
  • actions
  • {
  • Set Status(Event Player.LifeLink, Null, Unkillable, 9999);
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Apply Durable Upgrade 4")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is True For Any(All Players(Team 2), Current Array Element.LifeLink == Event Player) != True;
  • }
  • actions
  • {
  • Clear Status(Event Player, Unkillable);
  • }
  • }
  • rule("Apply Durable Upgrade 5")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 1;
  • Event Player.LifeLink != Null;
  • (Event Player.Down == True || Array Contains(All Players(Team 2), Event Player.LifeLink) != True || Has Spawned(Event Player)
  • != True || Has Spawned(Event Player.LifeLink) != True || Is Alive(Event Player) != True || Is Alive(Event Player.LifeLink)
  • != True || Event Player.LifeLink.LifeLink == Event Player || False) == True;
  • }
  • actions
  • {
  • Event Player.LifeLink = Null;
  • }
  • }
  • rule("Unlock Deadly Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 2;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Your modifier has been upgraded!"));
  • Set Max Health(Event Player, 50);
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String("Your cooldowns have been decreased and your health has been reduced further!"));
  • }
  • }
  • rule("Apply Deadly Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 2;
  • }
  • actions
  • {
  • Set Ability Cooldown(Event Player, Button(Ability 1), Ability Cooldown(Event Player, Button(Ability 1)) + -1);
  • Set Ability Cooldown(Event Player, Button(Ability 2), Ability Cooldown(Event Player, Button(Ability 2)) + -1);
  • Set Ability Cooldown(Event Player, Button(Secondary Fire), Ability Cooldown(Event Player, Button(Secondary Fire)) + -1);
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Unlock Life Steal Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 3;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Your modifier has been upgraded!"));
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String("Dealing damage now heals you and nearby players!"));
  • }
  • }
  • rule("Unlock Fast Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 4;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Your modifier has been upgraded!"));
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String("Jump while moving forward to dash in the direction you're looking!"));
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String("You can also use your quick melee on an enemy to stun them and jump backward!"));
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String("Doing this gives you temporary shield health"));
  • }
  • }
  • rule("Apply Fast Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 4;
  • Event Player.Down != True;
  • Is Alive(Event Player) == True;
  • Has Status(Event Player, Stunned) != True;
  • Has Status(Event Player, Knocked Down) != True;
  • Has Status(Event Player, Frozen) != True;
  • Has Status(Event Player, Rooted) != True;
  • Event Player.DoubleJump != True;
  • Is Button Held(Event Player, Button(Jump)) == True;
  • Z Component Of(Throttle Of(Event Player)) > 0.100;
  • }
  • actions
  • {
  • Apply Impulse(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player), -20), 25, To World,
  • Cancel Contrary Motion);
  • Play Effect(All Players(All Teams), Widowmaker Venom Mine Explosion Sound, Team Of(Event Player), Position Of(Event Player), 50);
  • Event Player.DoubleJump = True;
  • Wait(0.500, Ignore Condition);
  • }
  • }
  • rule("Apply Fast Upgrade 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 4;
  • Is On Ground(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Event Player.DoubleJump == True;
  • }
  • actions
  • {
  • Event Player.DoubleJump = False;
  • }
  • }
  • rule("Apply Fast Upgrade 3")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 4;
  • Event Ability == Button(Melee);
  • }
  • actions
  • {
  • If((Array Contains(Global.BossList, Hero Of(Victim)) == True || Array Contains(Global.MinibossList, Hero Of(Victim)) == True)
  • == True);
  • Set Status(Victim, Null, Stunned, 0.200);
  • Else If(Array Contains(Global.TankList, Hero Of(Victim)) == True);
  • Set Status(Victim, Null, Stunned, 0.600);
  • Else If(Array Contains(Global.TroopList, Hero Of(Victim)) == True);
  • Set Status(Victim, Null, Knocked Down, 1);
  • End;
  • If(Victim.Healer == 0);
  • Victim.A = Event Player;
  • End;
  • disabled Play Effect(All Players(All Teams), Doomfist Rising Uppercut Impact Sound, Team Of(Event Player), Position Of(Victim), 75);
  • Apply Impulse(Event Player, Direction From Angles(Horizontal Facing Angle Of(Event Player) + (Horizontal Facing Angle Of(
  • Event Player) > 0 ? -180 : 180), -20), 25, To World, Cancel Contrary Motion);
  • Remove Health Pool From Player(Event Player.FastShield);
  • Wait(0.016, Ignore Condition);
  • Add Health Pool To Player(Event Player, Shields, 35, False, True);
  • Event Player.FastShield = Last Created Health Pool;
  • Wait(0.100, Ignore Condition);
  • }
  • }
  • rule("Unlock Strong Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 5;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Your modifier has been upgraded!"));
  • disabled Create Effect(Filtered Array(All Players(All Teams), Event Player.Down != True), Ring, Color(White), Event Player, 2.500,
  • Visible To Position and Radius);
  • disabled Event Player.SpecialEffect = Last Created Entity;
  • disabled Create HUD Text(Event Player, Null, Null, Custom String(
  • "The upgraded Strong modifier allows you to block damage for nearby players!\r\n Currently Blocking: {0}",
  • Count Of(Filtered Array(All Players(Team 2), (
  • Current Array Element.StrongBuff[0] > 0.010 && Current Array Element.StrongBuff[1] == Event Player && Current Array Element.SpecialType != 5 && (
  • Current Array Element.SpecialType != 1 || (Current Array Element.SpecialType == 1 && Is Dummy Bot(Current Array Element)
  • == True))) == True))), Top, 10, Color(Sky Blue), Color(White), Color(White), Visible To and String, Default Visibility);
  • disabled Event Player.LinkHUD3 = Last Text ID;
  • Set Knockback Received(Event Player, 10);
  • Event Player.StrongBuff = True;
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String("Knockback and stuns are now less effective on you!"));
  • }
  • }
  • disabled rule("Apply Strong Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 5;
  • Event Player.Down != True;
  • }
  • actions
  • {
  • Players Within Radius(Eye Position(Event Player), 2.500, Team 2, Off).StrongBuff = Array(0.300, Event Player);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Apply Strong Upgrade 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.StrongBuff[0] > 0.010;
  • Event Player.SpecialType != 5;
  • (Event Player.SpecialType != 1 || Is Dummy Bot(Event Player) == True) == True;
  • }
  • actions
  • {
  • Create Beam Effect(All Players(All Teams), Good Beam, Event Player, Event Player.StrongBuff[1], Color(White),
  • Visible To Position and Radius);
  • Event Player.StrongFX = Last Created Entity;
  • Event Player.StrongHealth = Health(Event Player);
  • Set Status(Event Player, Null, Unkillable, 0.200);
  • Wait(0.100, Ignore Condition);
  • While(Event Player.StrongBuff[0] > 0.010);
  • Event Player.StrongBuff[0] += -0.100;
  • If(Health(Event Player) < Event Player.StrongHealth);
  • Damage(Event Player.StrongBuff[1], Null, 0.750 * (Event Player.StrongHealth + -1 * Health(Event Player)));
  • Set Player Health(Event Player, Event Player.StrongHealth);
  • Else If(Health(Event Player) > Event Player.StrongHealth);
  • Event Player.StrongHealth = Health(Event Player);
  • End;
  • Set Status(Event Player, Null, Unkillable, 0.150);
  • Heal(Event Player, Event Player.StrongBuff[1], 1);
  • Wait(0.100, Ignore Condition);
  • End;
  • Wait(0.100, Ignore Condition);
  • Destroy Effect(Event Player.StrongFX);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Unlock Exploding Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 6;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Your modifier has been upgraded!"));
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String("Your death explosion now heals allies as well!"));
  • }
  • }
  • rule("Unlock Floating Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 7;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Your modifier has been upgraded!"));
  • Create HUD Text(Event Player.FloatTarg, Custom String("Being carried by {0} {1} Jump to get down", Event Player, Hero Icon String(
  • Hero Of(Event Player))), Null, Null, Top, 10, Color(Orange), Color(White), Color(White), Visible To and String,
  • Default Visibility);
  • Event Player.LinkHUD = Last Text ID;
  • Create HUD Text(Filtered Array(Append To Array(Empty Array, Event Player), Event Player.FloatTarg != Null), Custom String(
  • "Carrying {0} {1}: {2} Interact to put down {0} {1}", Event Player.FloatTarg, Hero Icon String(Hero Of(
  • Event Player.FloatTarg)), Custom String("{0}/{1} Health", Round To Integer(Health(Event Player.FloatTarg), Up),
  • Round To Integer(Max Health(Event Player.FloatTarg), Up))), Null, Null, Top, 10, Color(Orange), Color(White), Color(White),
  • Visible To and String, Default Visibility);
  • Event Player.LinkHUD2 = Last Text ID;
  • Create In-World Text(Filtered Array(All Players(Team 2), (Current Array Element.SpecialType != 7 && Array Contains(
  • Players Within Radius(Eye Position(Event Player), 5, Team 2, Surfaces), Current Array Element)
  • == True && Event Player.FloatBase == Null && Event Player.Down != True && Current Array Element.Down != True && Event Player.FloatTarg == Null && True)
  • == True), Custom String("Press Interact to float with {0} {1}", Event Player, Hero Icon String(Hero Of(Event Player))),
  • Event Player, 1, Do Not Clip, Visible To Position and String, Color(White), Default Visibility);
  • Event Player.LinkHUD3 = Last Text ID;
  • Create HUD Text(Filtered Array(Append To Array(Empty Array, Event Player), Event Player.FloatTarg == Null), Custom String(
  • "The upgraded floating modifier allows you to carry teammates! Press Interact while looking at a teammate to carry them!"),
  • Null, Null, Top, 10, Color(Orange), Color(White), Color(White), Visible To and String, Default Visibility);
  • Event Player.LinkHUD4 = Last Text ID;
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String(
  • "You can now jump multiple times in the air and carry a teammate into the air with you!"));
  • }
  • }
  • rule("Apply Floating Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 7;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • disabled Is Alive(Event Player) == True;
  • disabled Has Status(Event Player, Stunned) != True;
  • disabled Has Status(Event Player, Knocked Down) != True;
  • disabled Has Status(Event Player, Frozen) != True;
  • disabled Has Status(Event Player, Rooted) != True;
  • disabled Event Player.Down != True;
  • disabled Is Alive(Player Closest To Reticle(Event Player, Team 2)) == True;
  • disabled Player Closest To Reticle(Event Player, Team 2) != Event Player;
  • disabled Player Closest To Reticle(Event Player, Team 2).FloatBase == Null;
  • disabled Player Closest To Reticle(Event Player, Team 2).FloatTarg == Null;
  • disabled Event Player.FloatCooldown != True;
  • disabled Event Player.FloatBase == Null;
  • disabled Event Player.FloatTarg == Null;
  • disabled Array Contains(Players Within Radius(Eye Position(Event Player), 5, Team 2, Surfaces), Player Closest To Reticle(Event Player,
  • Team 2)) == True;
  • }
  • actions
  • {
  • If(Event Player.FloatCooldown != True);
  • Event Player.FloatCooldown = True;
  • If(Is Alive(Event Player) == True);
  • If(Has Status(Event Player, Stunned) != True);
  • If(Has Status(Event Player, Knocked Down) != True);
  • If(Has Status(Event Player, Frozen) != True);
  • If(Has Status(Event Player, Rooted) != True);
  • If(Event Player.Down != True);
  • If(Is Alive(Player Closest To Reticle(Event Player, Team 2)) == True);
  • If(Player Closest To Reticle(Event Player, Team 2) != Event Player);
  • If(Player Closest To Reticle(Event Player, Team 2).FloatBase == Null);
  • If(Player Closest To Reticle(Event Player, Team 2).FloatTarg == Null);
  • If(Event Player.FloatBase == Null);
  • If(Event Player.FloatTarg == Null);
  • If(Array Contains(Players Within Radius(Eye Position(Event Player), 5, Team 2, Surfaces), Player Closest To Reticle(Event Player,
  • Team 2)) == True);
  • If(Event Player.FloatTarg != Null);
  • disabled Teleport(Event Player.FloatTarg, Position Of(Event Player));
  • disabled Event Player.FloatTarg.FloatBase = Null;
  • disabled Event Player.FloatTarg = Null;
  • Else;
  • Event Player.FloatTarg = Player Closest To Reticle(Event Player, Team 2);
  • Event Player.FloatTarg.FloatBase = Event Player;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • Wait(1, Ignore Condition);
  • Event Player.FloatCooldown = False;
  • }
  • }
  • rule("Apply Floating Upgrade 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 7;
  • Altitude Of(Event Player) < Distance Between(Eye Position(Event Player.FloatTarg), Position Of(Event Player.FloatTarg));
  • disabled Is Crouching(Event Player) != True;
  • }
  • actions
  • {
  • disabled Wait(0.016, Abort When False);
  • Event Player.FloatOffset = Vector(0, Distance Between(Position Of(Event Player), Eye Position(Event Player)), 0);
  • }
  • }
  • rule("Apply Floating Upgrade 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 7;
  • Altitude Of(Event Player) > Distance Between(Eye Position(Event Player.FloatTarg), Position Of(Event Player.FloatTarg));
  • }
  • actions
  • {
  • Event Player.FloatOffset = Vector(0, Distance Between(Eye Position(Event Player.FloatTarg), Position Of(Event Player.FloatTarg))
  • * -1, 0);
  • }
  • }
  • rule("Apply Floating Upgrade 4")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.FloatBase.FloatTarg == Event Player;
  • Distance Between(Position Of(Event Player), Position Of(Event Player.FloatBase) + Event Player.FloatBase.FloatOffset) > 0.100;
  • }
  • actions
  • {
  • disabled Start Forcing Player Position(Event Player, Event Player.FloatBase + Event Player.FloatBase.FloatOffset, True);
  • Attach Players(Event Player, Event Player.FloatBase, Event Player.FloatBase.FloatOffset);
  • Set Status(Event Player, Null, Rooted, 9999);
  • }
  • }
  • rule("Apply Floating Upgrade 5")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.FloatBase.FloatTarg != Event Player;
  • }
  • actions
  • {
  • Detach Players(Event Player);
  • disabled Stop Forcing Player Position(Event Player);
  • disabled Wait(0.016, Ignore Condition);
  • Event Player.FloatBase = Null;
  • Clear Status(Event Player, Rooted);
  • }
  • }
  • rule("Apply Floating Upgrade 6")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 7;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Event Player.FloatTarg != Null;
  • Event Player.FloatCooldown != True;
  • }
  • actions
  • {
  • disabled Event Player.FloatTarg.FloatBase = Null;
  • disabled Stop Forcing Player Position(Event Player.FloatTarg);
  • disabled Teleport(Event Player.FloatTarg, Position Of(Event Player));
  • Event Player.FloatTarg = Null;
  • Event Player.FloatCooldown = True;
  • Wait(1, Ignore Condition);
  • Event Player.FloatCooldown = False;
  • }
  • }
  • rule("Apply Floating Upgrade 7")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is True For Any(All Players(Team 2), Current Array Element.SpecialType == 7) == True;
  • (Array Contains(All Players(Team 2), Event Player.FloatBase) != True || Event Player.FloatBase.Down == True || Has Spawned(
  • Event Player.FloatBase) != True || Is Alive(Event Player.FloatBase) != True || Has Spawned(Event Player) != True || Is Alive(
  • Event Player) != True || Has Status(Event Player.FloatBase, Knocked Down) == True || Has Status(Event Player.FloatBase,
  • Stunned) == True || Has Status(Event Player.FloatBase, Frozen) == True || Is Button Held(Event Player, Button(Jump))
  • == True || False) == True;
  • }
  • actions
  • {
  • disabled Stop Forcing Player Position(Event Player);
  • Detach Players(Event Player);
  • Clear Status(Event Player, Rooted);
  • disabled Wait(0.016, Ignore Condition);
  • Event Player.FloatBase.FloatTarg = Null;
  • Event Player.FloatBase = Null;
  • }
  • }
  • rule("Apply Floating Upgrade 8")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Player Closest To Reticle(Event Player, Team 2).SpecialType == 7;
  • Is Button Held(Event Player, Button(Interact)) == True;
  • disabled Event Player.SpecialType != 7;
  • disabled Is Alive(Event Player) == True;
  • disabled Has Status(Event Player, Stunned) != True;
  • disabled Has Status(Event Player, Knocked Down) != True;
  • disabled Has Status(Event Player, Frozen) != True;
  • disabled Has Status(Event Player, Rooted) != True;
  • disabled Event Player.Down != True;
  • disabled Is Alive(Player Closest To Reticle(Event Player, Team 2)) == True;
  • disabled Player Closest To Reticle(Event Player, Team 2) != Event Player;
  • disabled Player Closest To Reticle(Event Player, Team 2).FloatBase == Null;
  • disabled Player Closest To Reticle(Event Player, Team 2).FloatTarg == Null;
  • disabled Event Player.FloatCooldown != True;
  • disabled Event Player.FloatBase == Null;
  • disabled Player Closest To Reticle(Event Player, Team 2).Down != True;
  • disabled Event Player.FloatTarg == Null;
  • disabled Array Contains(Players Within Radius(Eye Position(Event Player), 5, Team 2, Surfaces), Player Closest To Reticle(Event Player,
  • Team 2)) == True;
  • }
  • actions
  • {
  • If(Event Player.FloatCooldown != True);
  • Event Player.FloatCooldown = True;
  • If(Event Player.SpecialType != 7);
  • If(Is Alive(Event Player) == True);
  • If(Has Status(Event Player, Stunned) != True);
  • If(Has Status(Event Player, Knocked Down) != True);
  • If(Has Status(Event Player, Frozen) != True);
  • If(Has Status(Event Player, Rooted) != True);
  • If(Event Player.Down != True);
  • If(Is Alive(Player Closest To Reticle(Event Player, Team 2)) == True);
  • If(Player Closest To Reticle(Event Player, Team 2) != Event Player);
  • If(Player Closest To Reticle(Event Player, Team 2).FloatBase == Null);
  • If(Player Closest To Reticle(Event Player, Team 2).FloatTarg == Null);
  • If(Event Player.FloatBase == Null);
  • If(Player Closest To Reticle(Event Player, Team 2).Down != True);
  • If(Event Player.FloatTarg == Null);
  • If(Array Contains(Players Within Radius(Eye Position(Event Player), 5, Team 2, Surfaces), Player Closest To Reticle(Event Player,
  • Team 2)) == True);
  • Event Player.FloatBase = Player Closest To Reticle(Event Player, Team 2);
  • Event Player.FloatBase.FloatTarg = Event Player;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • Wait(1, Ignore Condition);
  • Event Player.FloatCooldown = False;
  • }
  • }
  • rule("Apply Floating Upgrade 9")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 7;
  • Is Button Held(Event Player, Button(Jump)) == True;
  • disabled Is Alive(Event Player) == True;
  • disabled Has Status(Event Player, Stunned) != True;
  • disabled Has Status(Event Player, Knocked Down) != True;
  • disabled Has Status(Event Player, Frozen) != True;
  • disabled Has Status(Event Player, Rooted) != True;
  • disabled Event Player.DoubleJump > 0;
  • disabled Event Player.Down != True;
  • }
  • actions
  • {
  • If(Is Alive(Event Player) == True);
  • If(Has Status(Event Player, Stunned) != True);
  • If(Has Status(Event Player, Knocked Down) != True);
  • If(Has Status(Event Player, Frozen) != True);
  • If(Has Status(Event Player, Rooted) != True);
  • If(Event Player.DoubleJump > 0);
  • If(Event Player.Down != True);
  • Apply Impulse(Event Player, Up, 5, To World, Cancel Contrary Motion);
  • Event Player.DoubleJump = Event Player.DoubleJump + -1;
  • Wait(0.100, Ignore Condition);
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • End;
  • }
  • }
  • rule("Apply Floating Upgrade 10")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 7;
  • Is On Ground(Event Player) == True;
  • Is Alive(Event Player) == True;
  • Event Player.DoubleJump < 4;
  • }
  • actions
  • {
  • Event Player.DoubleJump = 4;
  • }
  • }
  • disabled rule("Apply Floating Upgrade 11")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 7;
  • Altitude Of(Event Player) < Distance Between(Eye Position(Event Player.FloatTarg), Position Of(Event Player.FloatTarg));
  • Is Crouching(Event Player) == True;
  • }
  • actions
  • {
  • Wait(0.016, Abort When False);
  • Event Player.FloatOffset = Vector(0, Distance Between(Position Of(Event Player), Eye Position(Event Player)), 0);
  • }
  • }
  • rule("Unlock Burning Upgrade")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Global.UpgradedMods == True;
  • Event Player.SpecialType == 8;
  • }
  • actions
  • {
  • Small Message(Event Player, Custom String("Your modifier has been upgraded!"));
  • Wait(4, Ignore Condition);
  • Small Message(Event Player, Custom String("Enemies and allies you interact with can now spread your burning effect!"));
  • }
  • }
  • rule("Activate Burning Spread")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • disabled Team Of(Event Player) == Team 2;
  • disabled Event Player.BurnOrigin != Null;
  • disabled Has Status(Victim, Burning) != True;
  • disabled Event Player.SpecialType != 8;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 2);
  • If(Event Player.BurnOrigin != Null);
  • disabled If(Event Ability != Null);
  • If(Event Player.SpecialType != 8);
  • Victim.DmgBurn = 2;
  • End;
  • disabled End;
  • End;
  • End;
  • }
  • }
  • rule("Activate Burning Spread 2")
  • {
  • event
  • {
  • Player Dealt Healing;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • disabled Team Of(Event Player) == Team 2;
  • disabled Event Player.BurnOrigin != Null;
  • disabled Has Status(Healee, Burning) != True;
  • disabled Event Player.SpecialType != 8;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 2);
  • If(Event Player.BurnOrigin != Null);
  • disabled If(Event Ability != Null);
  • If(Event Player.SpecialType != 8);
  • Healee.HealPl = Event Player.BurnOrigin;
  • Healee.HealBurn = 2;
  • End;
  • disabled End;
  • End;
  • End;
  • }
  • }
  • rule("Activate Burning Spread Enemy")
  • {
  • event
  • {
  • Player Dealt Damage;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Team Of(Event Player) == Team 1;
  • disabled Event Player.BurnOrigin != Null;
  • disabled Event Player.SpecialType != 8;
  • disabled Has Status(Victim, Burning) != True;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 1);
  • If(Event Player.BurnOrigin != Null);
  • disabled If(Event Ability != Null);
  • If(Event Player.SpecialType != 8);
  • Victim.HealPl = Event Player.BurnOrigin;
  • Victim.HealBurn = 2;
  • End;
  • disabled End;
  • End;
  • End;
  • }
  • }
  • rule("Slot 0 Bot Spawn")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Count Of(All Players(Team 1)) < 8;
  • First Of(Global.Enemies) != 0;
  • (Global.RoundPoints < 1 || Count Of(Global.Enemies) > 20) == True;
  • }
  • actions
  • {
  • "These rules control all the fancy enemy respawning stuff that makes a 6 player enemy team seem like an army!"
  • disabled Wait(Random Real(0.250, 0.500), Abort When False);
  • Wait(0.250, Abort When False);
  • While(Global.EnemyDelay == True);
  • Wait(Random Real(0.250, 0.750), Abort When False);
  • End;
  • Global.EnemyDelay = True;
  • If(First Of(Global.Enemies) != Global.Type1 && First Of(Global.Enemies) != Global.Type2 && First Of(Global.Enemies)
  • != Global.Type3 && First Of(Global.Enemies) != Global.Type4 && True);
  • Wait(1, Abort When False);
  • If(Count Of(Players On Hero(Global.Type1, Team 1)) < 1);
  • Global.TempID = First Of(Global.Enemies);
  • Global.Type1 = Global.TempID;
  • disabled Global.TempCount = Count Of(Filtered Array(Global.Enemies, Current Array Element == Global.TempID));
  • disabled Global.Enemies = Filtered Array(Global.Enemies, Current Array Element != Global.TempID);
  • disabled For Global Variable(TempControl, 0, Global.TempCount + -1, 1);
  • disabled Global.Enemies = Append To Array(Array(Global.TempID), Global.Enemies);
  • disabled End;
  • Else If(Count Of(Players On Hero(Global.Type2, Team 1)) < 1);
  • Global.TempID = First Of(Global.Enemies);
  • Global.Type2 = Global.TempID;
  • disabled Global.TempCount = Count Of(Filtered Array(Global.Enemies, Current Array Element == Global.TempID));
  • disabled Global.Enemies = Filtered Array(Global.Enemies, Current Array Element != Global.TempID);
  • disabled For Global Variable(TempControl, 0, Global.TempCount + -1, 1);
  • disabled Global.Enemies = Append To Array(Array(Global.TempID), Global.Enemies);
  • disabled End;
  • Else If(Count Of(Players On Hero(Global.Type3, Team 1)) < 1);
  • Global.TempID = First Of(Global.Enemies);
  • Global.Type3 = Global.TempID;
  • disabled Global.TempCount = Count Of(Filtered Array(Global.Enemies, Current Array Element == Global.TempID));
  • disabled Global.Enemies = Filtered Array(Global.Enemies, Current Array Element != Global.TempID);
  • disabled For Global Variable(TempControl, 0, Global.TempCount + -1, 1);
  • disabled Global.Enemies = Append To Array(Array(Global.TempID), Global.Enemies);
  • disabled End;
  • Else If(Count Of(Players On Hero(Global.Type4, Team 1)) < 1);
  • Global.TempID = First Of(Global.Enemies);
  • Global.Type4 = Global.TempID;
  • disabled Global.TempCount = Count Of(Filtered Array(Global.Enemies, Current Array Element == Global.TempID));
  • disabled Global.Enemies = Filtered Array(Global.Enemies, Current Array Element != Global.TempID);
  • disabled For Global Variable(TempControl, 0, Global.TempCount + -1, 1);
  • disabled Global.Enemies = Append To Array(Array(Global.TempID), Global.Enemies);
  • disabled End;
  • Else;
  • Wait(1, Ignore Condition);
  • Loop If Condition Is True;
  • Abort;
  • End;
  • End;
  • Create Dummy Bot(First Of(Global.Enemies), Team 1, -1, Random Value In Array(Global.EnemySpawns), Vector(0, 0, 0));
  • Global.Enemies = Array Slice(Global.Enemies, 1, Count Of(Global.Enemies));
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Slot 1 Bot Spawn")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Is Alive(Players In Slot(1, Team 1)) != True || Has Spawned(Players In Slot(1, Team 1)) != True) == True;
  • First Of(Global.Enemies) != 0;
  • Global.RoundPoints < 1;
  • }
  • actions
  • {
  • Wait(Random Real(1, 3), Abort When False);
  • While(Global.EnemyDelay == True);
  • Wait(Random Real(0.250, 0.750), Abort When False);
  • End;
  • Global.EnemyDelay = True;
  • Destroy Dummy Bot(Team 1, 1);
  • Wait(0.250, Abort When False);
  • Create Dummy Bot(First Of(Global.Enemies), Team 1, 1, Random Value In Array(Global.EnemySpawns), Vector(0, 0, 0));
  • Global.Enemies = Array Slice(Global.Enemies, 1, Count Of(Global.Enemies));
  • }
  • }
  • disabled rule("Slot 2 Bot Spawn")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Is Alive(Players In Slot(2, Team 1)) != True || Has Spawned(Players In Slot(2, Team 1)) != True) == True;
  • First Of(Global.Enemies) != 0;
  • Global.RoundPoints < 1;
  • }
  • actions
  • {
  • Wait(Random Real(1, 3), Abort When False);
  • While(Global.EnemyDelay == True);
  • Wait(Random Real(0.250, 0.750), Abort When False);
  • End;
  • Global.EnemyDelay = True;
  • Destroy Dummy Bot(Team 1, 2);
  • Wait(0.250, Abort When False);
  • Create Dummy Bot(First Of(Global.Enemies), Team 1, 2, Random Value In Array(Global.EnemySpawns), Vector(0, 0, 0));
  • Global.Enemies = Array Slice(Global.Enemies, 1, Count Of(Global.Enemies));
  • }
  • }
  • disabled rule("Slot 3 Bot Spawn")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Is Alive(Players In Slot(3, Team 1)) != True || Has Spawned(Players In Slot(3, Team 1)) != True) == True;
  • First Of(Global.Enemies) != 0;
  • Global.RoundPoints < 1;
  • }
  • actions
  • {
  • Wait(Random Real(1, 3), Abort When False);
  • While(Global.EnemyDelay == True);
  • Wait(Random Real(0.250, 0.750), Abort When False);
  • End;
  • Global.EnemyDelay = True;
  • Destroy Dummy Bot(Team 1, 3);
  • Wait(0.250, Abort When False);
  • Create Dummy Bot(First Of(Global.Enemies), Team 1, 3, Random Value In Array(Global.EnemySpawns), Vector(0, 0, 0));
  • Global.Enemies = Array Slice(Global.Enemies, 1, Count Of(Global.Enemies));
  • }
  • }
  • disabled rule("Slot 4 Bot Spawn")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Is Alive(Players In Slot(4, Team 1)) != True || Has Spawned(Players In Slot(4, Team 1)) != True) == True;
  • First Of(Global.Enemies) != 0;
  • Global.RoundPoints < 1;
  • }
  • actions
  • {
  • Wait(Random Real(1, 3), Abort When False);
  • While(Global.EnemyDelay == True);
  • Wait(Random Real(0.250, 0.750), Abort When False);
  • End;
  • Global.EnemyDelay = True;
  • Destroy Dummy Bot(Team 1, 4);
  • Wait(0.250, Abort When False);
  • Create Dummy Bot(First Of(Global.Enemies), Team 1, 4, Random Value In Array(Global.EnemySpawns), Vector(0, 0, 0));
  • Global.Enemies = Array Slice(Global.Enemies, 1, Count Of(Global.Enemies));
  • }
  • }
  • disabled rule("Slot 5 Bot Spawn")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • (Is Alive(Players In Slot(5, Team 1)) != True || Has Spawned(Players In Slot(5, Team 1)) != True) == True;
  • First Of(Global.Enemies) != 0;
  • Global.RoundPoints < 1;
  • }
  • actions
  • {
  • Wait(Random Real(1, 3), Abort When False);
  • While(Global.EnemyDelay == True);
  • Wait(Random Real(0.250, 0.750), Abort When False);
  • End;
  • Global.EnemyDelay = True;
  • Destroy Dummy Bot(Team 1, 5);
  • Wait(0.250, Abort When False);
  • Create Dummy Bot(First Of(Global.Enemies), Team 1, 5, Random Value In Array(Global.EnemySpawns), Vector(0, 0, 0));
  • Global.Enemies = Array Slice(Global.Enemies, 1, Count Of(Global.Enemies));
  • }
  • }
  • rule("Generate Rounds")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.RoundPoints > 0;
  • Count Of(Global.Enemies) < 25;
  • }
  • actions
  • {
  • "The round generator creates a list of enemies for the game to spawn using randomized round modifiers and attempts to distribute enemies of different strengths throughout the round"
  • If(Global.Bosses / Global.EnemyCount < Global.BossRate && First Of(Global.BossList) != 0 && Global.BossRound == True);
  • If(Global.ForceBoss == 0);
  • If((Random Integer(0, 1) == 0 || Global.TempBoss == Null) == True);
  • Global.TempBoss = Random Value In Array(Global.BossList);
  • End;
  • Global.Enemies = Append To Array(Global.Enemies, Global.TempBoss);
  • Else;
  • Global.Enemies = Append To Array(Global.Enemies, Global.ForceBoss);
  • End;
  • Global.RoundPoints -= 15;
  • Global.Bosses += 1;
  • Else If(Global.Minibosses / Global.EnemyCount < Global.MinibossRate && First Of(Global.MinibossList)
  • != 0 && Global.MinibossRound == True);
  • If(Global.ForceMiniboss == 0);
  • If((Random Integer(0, 1) == 0 || Global.TempMiniboss == Null) == True);
  • Global.TempMiniboss = Random Value In Array(Global.MinibossList);
  • End;
  • Global.Enemies = Append To Array(Global.Enemies, Global.TempMiniboss);
  • Else;
  • Global.Enemies = Append To Array(Global.Enemies, Global.ForceMiniboss);
  • End;
  • Global.RoundPoints -= 5;
  • Global.Minibosses += 1;
  • Else If(Global.Tanks / Global.EnemyCount < Global.TankRate && First Of(Global.TankList) != 0 && True == True);
  • If(Global.ForceTank == 0);
  • If((Random Integer(0, 3) == 0 || Global.TempTank == Null) == True);
  • Global.TempTank = Random Value In Array(Global.TankList);
  • End;
  • Global.Enemies = Append To Array(Global.Enemies, Global.TempTank);
  • Else;
  • Global.Enemies = Append To Array(Global.Enemies, Global.ForceTank);
  • End;
  • Global.RoundPoints -= 2;
  • Global.Tanks += 1;
  • Else;
  • If(Global.ForceTroop == 0);
  • If((Random Integer(0, 7) == 0 || Global.TempTroop == Null) == True);
  • Global.TempTroop = Random Value In Array(Global.TroopList);
  • End;
  • Global.Enemies = Append To Array(Global.Enemies, Global.TempTroop);
  • Else;
  • Global.Enemies = Append To Array(Global.Enemies, Global.ForceTroop);
  • End;
  • Global.RoundPoints -= 1;
  • Global.Troops += 1;
  • End;
  • Global.EnemyCount += 1;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Enemy Delay")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.EnemyDelay == True;
  • }
  • actions
  • {
  • If(Server Load Average > 200);
  • Wait(1.500, Abort When False);
  • Else;
  • Wait(0.250, Abort When False);
  • End;
  • Global.EnemyDelay = False;
  • Wait(0.100, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("Unlock Soldiers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > -1;
  • }
  • actions
  • {
  • "Different enemies are unlocked as you progress"
  • Global.TroopList = Append To Array(Empty Array, Hero(Soldier: 76));
  • Global.TankList = Empty Array;
  • Global.MinibossList = Empty Array;
  • Global.BossList = Empty Array;
  • Global.Enemies = Empty Array;
  • }
  • }
  • disabled rule("Unlock Reapers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 2;
  • }
  • actions
  • {
  • "The behavior of Reapers and Soldiers is very similar to the Talon Soldiers and Enforcers in the Archives missions"
  • Global.TankList = Append To Array(Global.TankList, Hero(Reaper));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TankList), Hero Icon String(Last Of(
  • Global.TankList))));
  • }
  • }
  • disabled rule("Unlock Ashes")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 2;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "They only throw dynamite, but the damage over time can be a problem for the defense hero if there's no healer!"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Ashe));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Symmetras")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 2;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Symmetra acts like a ranged version of Reaper. The orbs are slow and easily dodged, but can do a lot of damage!"
  • Global.TankList = Append To Array(Global.TankList, Hero(Symmetra));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TankList), Hero Icon String(Last Of(
  • Global.TankList))));
  • }
  • }
  • disabled rule("Unlock Doomfists")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 2;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Doomfist is very slow, but his punch can do a lot of damage if he gets close enough to use it!"
  • Global.TankList = Append To Array(Global.TankList, Hero(Doomfist));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TankList), Hero Icon String(Last Of(
  • Global.TankList))));
  • }
  • }
  • disabled rule("Unlock Torbs")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 3;
  • }
  • actions
  • {
  • "The first miniboss! He's basically just a stronger Reaper"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Torbjörn));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.MinibossList), Hero Icon String(
  • Last Of(Global.MinibossList))));
  • }
  • }
  • disabled rule("Unlock Widowmakers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 3;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "Long range damage! They attack slowly, but if several of them fire at once they can do a lot of damage in a short time!"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Widowmaker));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Brigs")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 3;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "All of the actual tanks are reserved for being bosses, so Brigitte is like a tank for the regular enemies! She has low damage and lots of health"
  • Global.TankList = Append To Array(Global.TankList, Hero(Brigitte));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TankList), Hero Icon String(Last Of(
  • Global.TankList))));
  • }
  • }
  • disabled rule("Unlock Zens")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 3;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Another miniboss! He mostly just applies his Discord Orb to players and has a bunch of health"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Zenyatta));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.MinibossList), Hero Icon String(
  • Last Of(Global.MinibossList))));
  • }
  • }
  • disabled rule("Unlock Hogs")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 4;
  • }
  • actions
  • {
  • "The first boss! Roadhog is essentially a stronger version of Reaper and Torbjorn. He uses his hook sometimes as well!"
  • Global.BossList = Append To Array(Global.BossList, Hero(Roadhog));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.BossList), Hero Icon String(Last Of(
  • Global.BossList))));
  • }
  • }
  • disabled rule("Unlock Sombras")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 4;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "Like other basic troop types Sombras aren't that threatening alone, but many of them can spawn together! They attack from a closer range than most other regular troops and have a little extra health"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Sombra));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Junkrats")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 4;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Junkrat is the second ranged enemy that's considered a mini tank for spawning purposes. He fires 3 high damage bombs that have more than normal knockback"
  • Global.TankList = Append To Array(Global.TankList, Hero(Junkrat));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TankList), Hero Icon String(Last Of(
  • Global.TankList))));
  • }
  • }
  • disabled rule("Unlock Winstons")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 4;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Winston by himself mostly just knocks you around and has a ton of health, but when he's backed up by other enemies he can quickly knock the defense hero into dangererous positions"
  • Global.BossList = Append To Array(Global.BossList, Hero(Winston));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.BossList), Hero Icon String(Last Of(
  • Global.BossList))));
  • }
  • }
  • disabled rule("Unlock Bastions")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 5;
  • }
  • actions
  • {
  • "As you would probably expect Bastion just shoots at things in Sentry form"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Bastion));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.MinibossList), Hero Icon String(
  • Last Of(Global.MinibossList))));
  • }
  • }
  • disabled rule("Unlock Pharahs")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 5;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "A flying basic troop! Pharahs fly around and shoot rockets"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Pharah));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Lucios")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 5;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Lucio speed boosts the other enemies! He can be a big problem if slow close range enemies are nearby"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Lúcio));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.MinibossList), Hero Icon String(
  • Last Of(Global.MinibossList))));
  • }
  • }
  • disabled rule("Unlock Dvas")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 5;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "D.Va launches exploding mechs at you. If you can damage her out of her mech she gets stunned and won't be able to call a new mech to launch at you. This is important if you want to defeat her!"
  • Global.BossList = Append To Array(Global.BossList, Hero(D.Va));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.BossList), Hero Icon String(Last Of(
  • Global.BossList))));
  • }
  • }
  • disabled rule("Unlock Genjis")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 6;
  • }
  • actions
  • {
  • "The shortest range basic troop. If he gets close enough he dashes, which can be an issue for the defense hero at higher difficulties"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Genji));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock McCrees")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 6;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "McCree has more health than the other ranged mini tanks, but he doesn't have as much range. He fires in quick inaccurate bursts"
  • Global.TankList = Append To Array(Global.TankList, Hero(McCree));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TankList), Hero Icon String(Last Of(
  • Global.TankList))));
  • }
  • }
  • disabled rule("Unlock Sigmas")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 6;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Sigma is the first long range boss. His orbs are very difficult to avoid and do lots of damage!"
  • Global.BossList = Append To Array(Global.BossList, Hero(Sigma));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.BossList), Hero Icon String(Last Of(
  • Global.BossList))));
  • }
  • }
  • disabled rule("Unlock Moiras")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 6;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Moira attacks using her ultimate that goes through players and barriers. The damage isn't that much, but it could be an issue for the defense hero if the healers aren't paying attention"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Moira));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.MinibossList), Hero Icon String(
  • Last Of(Global.MinibossList))));
  • }
  • }
  • disabled rule("Unlock Reins")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 7;
  • }
  • actions
  • {
  • "Reinhardt behaves similarly to Brigitte. He attempts to block as much damage as possible with his shield then does big damage with his hammer if you let him get too close! If you get too far away he can charge!"
  • Global.BossList = Append To Array(Global.BossList, Hero(Reinhardt));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.BossList), Hero Icon String(Last Of(
  • Global.BossList))));
  • }
  • }
  • disabled rule("Unlock Mercys")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 7;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "There's a way to get Mercy to leave without dropping a pile of Reapers on you... Just say hello back to her!"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Mercy));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.MinibossList), Hero Icon String(
  • Last Of(Global.MinibossList))));
  • }
  • }
  • disabled rule("Unlock Hanzos")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 7;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Hanzo is a basic projectile enemy. He fires several slow storm arrows after waiting for a while. They're easy to dodge, but can do a lot of damage if they all hit"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Hanzo));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Meis")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 7;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Mei is the second blocking minitank. She attempts to get very close then uses her Ice Block after taking damage. This can act as a shield for nearby enemies. Her weapon also applies a weak slow effect"
  • Global.TankList = Append To Array(Global.TankList, Hero(Mei));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TankList), Hero Icon String(Last Of(
  • Global.TankList))));
  • }
  • }
  • disabled rule("Unlock Tracers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 8;
  • }
  • actions
  • {
  • "Tracer blinks around players and fires in short bursts. Much like Genji she can quickly begin attacking from unexpected angles and is a potential problem for the defense hero"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Tracer));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Wrecking Balls")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 8;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "Wrecking Ball is like a rolling Bastion. He does lots of damage and can easily get close, but his long reload time leaves him vulnerable to attacks"
  • Global.BossList = Append To Array(Global.BossList, Hero(Wrecking Ball));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.BossList), Hero Icon String(Last Of(
  • Global.BossList))));
  • }
  • }
  • disabled rule("Unlock Orisas")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 8;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Orisa by herself isn't a huge issue. Primarily she enables other enemies by launching everyone out from behind cover using her Fortify bounce and placing her Supercharger."
  • Global.BossList = Append To Array(Global.BossList, Hero(Orisa));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.BossList), Hero Icon String(Last Of(
  • Global.BossList))));
  • }
  • }
  • disabled rule("Unlock Baptistes")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 8;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Baptiste is a ranged healer enemy. Baptiste doesn't do a lot of damage, but the enemies around him slowly heal."
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Baptiste));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Anas")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 8;
  • }
  • actions
  • {
  • Wait(4, Ignore Condition);
  • "Ana is the first enemy healer that intentionally targets other enemies instead of healing through a passive."
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Ana));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Zaryas")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 8;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • "Zarya is a disruptive miniboss that pulls players close and uses a strong melee attack to push them away again if they get too close."
  • Global.BossList = Append To Array(Global.BossList, Hero(Zarya));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Echos")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 8;
  • }
  • actions
  • {
  • Wait(6, Ignore Condition);
  • "Echo is similar to other close range enemies except she flies backwards after each attack and flies closer to players if she's too far."
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Echo));
  • disabled Small Message(All Players(All Teams), String("{0} {1} {2}", String("Unlocked"), Last Of(Global.TroopList), Hero Icon String(
  • Last Of(Global.TroopList))));
  • }
  • }
  • disabled rule("Unlock Special Round")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 9;
  • }
  • actions
  • {
  • Global.SpecialRound = True;
  • }
  • }
  • disabled rule("Unlock Durable Modifier")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 10;
  • }
  • actions
  • {
  • Global.TypeUnlock = 1;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Durable Enemies {0}",
  • Ability Icon String(Hero(Brigitte), Button(Secondary Fire)))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Durable Enemies {0} have more health, but less damage.", Ability Icon String(
  • Hero(Brigitte), Button(Secondary Fire))));
  • }
  • }
  • disabled rule("Unlock Deadly Modifier")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 11;
  • }
  • actions
  • {
  • Global.TypeUnlock = 2;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Deadly Enemies {0}", Icon String(
  • Skull))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Deadly Enemies {0} have more damage, but less health.", Icon String(Skull)));
  • }
  • }
  • disabled rule("Unlock Life Steal Modifier")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 12;
  • }
  • actions
  • {
  • Global.TypeUnlock = 3;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Life Stealing Enemies {0}", Icon String(
  • Spiral))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Life Stealing Enemies {0} heal when they do damage.", Icon String(Spiral)));
  • }
  • }
  • disabled rule("Unlock Fast Modifier")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 13;
  • }
  • actions
  • {
  • Global.TypeUnlock = 4;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Fast Enemies {0}", Icon String(
  • Ring Thin))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Fast Enemies {0} move faster than regular enemies, but have less damage and health.", Icon String(Ring Thin)));
  • }
  • }
  • disabled rule("Unlock Strong Modifier")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 14;
  • }
  • actions
  • {
  • Global.TypeUnlock = 5;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Strong Enemies {0}", Icon String(
  • Bolt))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Strong Enemies {0} have more health and damage than regular enemies, but move slower.", Icon String(Bolt)));
  • }
  • }
  • disabled rule("Unlock Exploding Modifier")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 15;
  • }
  • actions
  • {
  • Global.TypeUnlock = 6;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Exploding Enemies {0}", Icon String(
  • Radioactive))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Exploding Enemies {0} deal damage in an area when they're killed.",
  • Icon String(Radioactive)));
  • }
  • }
  • disabled rule("Unlock Floating Modifier")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 16;
  • }
  • actions
  • {
  • Global.TypeUnlock = 7;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Floating Enemies {0}",
  • Ability Icon String(Hero(Mercy), Button(Ability 1)))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Floating Enemies {0} jump and stay in the air longer.", Ability Icon String(
  • Hero(Mercy), Button(Ability 1))));
  • }
  • }
  • disabled rule("Unlock Burning Modifier")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 17;
  • }
  • actions
  • {
  • Global.TypeUnlock = 8;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Burning Enemies {0}", Icon String(
  • Fire))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Burning Enemies {0} set anything they damage on fire.", Icon String(Fire)));
  • }
  • }
  • disabled rule("Unlock Increased Boss and Miniboss Spawn Rates")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 18;
  • }
  • actions
  • {
  • Small Message(All Players(All Teams), Custom String("Stronger enemies will now appear more often"));
  • Global.TroopRate = 1;
  • Global.TankRate = 0.350;
  • Global.MinibossRate = 0.100;
  • Global.BossRate = 0.050;
  • }
  • }
  • disabled rule("Unlock Alternate Soldiers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 19;
  • }
  • actions
  • {
  • "Soldier gains the use of his Helix Rocket in his alternate form"
  • Global.AlternateForms = Append To Array(Empty Array, Hero(Soldier: 76));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Alternate Form Enemies attack differently and have a white orb over their heads"));
  • }
  • }
  • disabled rule("Unlock Alternate Reapers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 19;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "Reaper uses Wraith Form to get close in his alternate form"
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Reaper));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Ashes")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 19;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Ashe shoots in addition to throwing dynamite in her alternate form"
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Ashe));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Symmetras")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 19;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Symmetra shoots 3 small orbs instead of 1 big orb in her alternate form"
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Symmetra));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Doomfists")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 19;
  • }
  • actions
  • {
  • Wait(4, Ignore Condition);
  • "Doomfist attempts to knock players into the air instead of punching at close range in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Doomfist));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Widowmakers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 19;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • "Widowmaker shoots faster, but doesn't fully charge her shots in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Widowmaker));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Brigs")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 19;
  • }
  • actions
  • {
  • Wait(6, Ignore Condition);
  • "Brigitte shield bashes instead of using her mace at close range in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Brigitte));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Zens")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 19;
  • }
  • actions
  • {
  • Wait(7, Ignore Condition);
  • "Zenyatta throws several orbs in bursts instead of throwing individual orbs in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Zenyatta));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Hogs")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 19;
  • }
  • actions
  • {
  • Wait(8, Ignore Condition);
  • "Roadhog uses his longer ranged secondary fire instead of his primary fire in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Roadhog));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Sombras")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 20;
  • }
  • actions
  • {
  • "Sombra uses her invisibility to get into effective range in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Sombra));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Junkrat")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 20;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "Junkrat places a trap and launches himself into the air with his mine after his regular attack cycle in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Junkrat));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Bastion")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 20;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Bastion transforms into his tank form instead of sentry form in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Bastion));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Pharah")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 20;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Pharah fires rockets in 3 round bursts with a longer delay rather than faster and one at a time in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Pharah));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Lucio")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 20;
  • }
  • actions
  • {
  • Wait(4, Ignore Condition);
  • "Lucio switches between his speed and healing auras in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Lúcio));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Dva")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 20;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • "Dva only self destructs after her mech is moderately damaged rather than launching it as soon as she sees an enemy in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(D.Va));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Genji")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 20;
  • }
  • actions
  • {
  • Wait(6, Ignore Condition);
  • "Genji uses his deflect in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Genji));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate McCree")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 20;
  • }
  • actions
  • {
  • Wait(7, Ignore Condition);
  • "McCree fires more precise shots one at a time in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(McCree));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Sigma")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 20;
  • }
  • actions
  • {
  • Wait(8, Ignore Condition);
  • "Sigma floats in the air and his Kinetic Grasp pulls everyone to him in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Sigma));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Moira")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • "Moira throws orbs in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Moira));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Reinhardt")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "Reinhardt swings his hammer more often in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Reinhardt));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Mercy")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Mercy spawns Torbjorns instead of Reapers when killed in her alternate form"
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Mercy));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Hanzo")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Hanzo fires single arrows with a faster attack rate rather than firing multiple arrows then waiting in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Hanzo));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Mei")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • Wait(4, Ignore Condition);
  • "Mei creates ice walls while attacking in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Mei));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Tracer")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • "Tracer becomes less predictable in her alternate form, gaining the ability to randomly recall or start shooting early."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Tracer));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Wrecking Ball")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • Wait(6, Ignore Condition);
  • "Wrecking Ball jumps to nearby players and drops on them before attacking in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Wrecking Ball));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Orisa")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • Wait(7, Ignore Condition);
  • "Orisa gains the use of her barrier in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Orisa));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Baptiste")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • Wait(8, Ignore Condition);
  • "Baptiste occasionally uses his Immortality Field in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Baptiste));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Alternate Winston")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 21;
  • }
  • actions
  • {
  • Wait(9, Ignore Condition);
  • "Winston picks up other enemies in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Winston));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • }
  • }
  • disabled rule("Unlock Increased Boss and Miniboss Spawn Rates 2")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 22;
  • }
  • actions
  • {
  • Small Message(All Players(All Teams), Custom String(
  • "The enemies are gathering their strongest forces! Stronger enemies will appear even more often."));
  • Global.TroopRate = 1;
  • Global.TankRate = 0.250;
  • Global.MinibossRate = 0.250;
  • Global.BossRate = 0.150;
  • }
  • }
  • disabled rule("Unlock Upgraded Modifiers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 23;
  • }
  • actions
  • {
  • Global.UpgradedMods = True;
  • }
  • }
  • disabled rule("Unlock Ultimate Soldiers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 24;
  • }
  • actions
  • {
  • "Ultimate form soldier shoots a lot and fires bursts of rockets in his alternate form."
  • Global.UltimateForms = Append To Array(Empty Array, Hero(Soldier: 76));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Ultimate form enemies attack in different and better ways. They have a red orb and are much more dangerous than regular enemies."));
  • }
  • }
  • disabled rule("Unlock Ultimate Reapers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 24;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "Reaper uses his ultimate at close range instead of his regular attack in his ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Reaper));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • }
  • }
  • disabled rule("Unlock Ultimate Ashes")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 24;
  • }
  • actions
  • {
  • Wait(2, Ignore Condition);
  • "Ashe throws lots of dynamite and summons Bob in her ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Ashe));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • }
  • }
  • disabled rule("Unlock Ultimate Symmetras")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 24;
  • }
  • actions
  • {
  • Wait(3, Ignore Condition);
  • "Symmetra deploys her turrets in her ultimate form. It seems as if the Workshop damage modification doesn't apply to turrets, so the turrets by themselves are enough for an ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Symmetra));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • }
  • }
  • disabled rule("Unlock Ultimate Doomfists")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 24;
  • }
  • actions
  • {
  • Wait(4, Ignore Condition);
  • "Doomfist spams his abilities after encountering an enemy, knocking them all over the place and generally being annoying in his ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Doomfist));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • }
  • }
  • disabled rule("Unlock Ultimate Torbs")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 24;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • "Torbjorn deploys his turret in his ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Torbjörn));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • }
  • }
  • disabled rule("Unlock Ultimate Widowmakers")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 25;
  • }
  • actions
  • {
  • "Widowmaker attacks faster and grapples to other enemies if a player gets too close."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Widowmaker));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • }
  • }
  • disabled rule("Unlock Ultimate Brigs")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 25;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • "Brigitte moves faster, increases the health of other enemies, and shield bashes more often in her ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Brigitte));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • }
  • }
  • rule("Unlock the Final Round")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > (Global.FastMode != True ? Global.FinalRound : 10) + -1;
  • }
  • actions
  • {
  • Small Message(All Players(All Teams), Custom String(
  • "It looks like the enemies have gathered all of their forces for one last attack! Get ready for the final round!"));
  • disabled Global.TroopRate = 1;
  • disabled Global.TankRate = 0.100;
  • disabled Global.MinibossRate = 0.250;
  • disabled Global.BossRate = 0.500;
  • }
  • }
  • rule("End")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > (Global.FastMode != True ? Global.FinalRound : 10);
  • }
  • actions
  • {
  • Wait(1, Abort When False);
  • "It actually ends! All you have to do is reach round 999..."
  • Big Message(All Players(All Teams), Custom String("You defeated all the enemies! You win! Thanks for playing!"));
  • Create Dummy Bot(Global.LastHero, Team 2, 4, Global.SpawnPos, Vector(0, 0, 0));
  • If((Global.J == 1 && Array Contains(All Support Heroes, Global.LastHero) == True) == True);
  • Wait(0.100, Ignore Condition);
  • Players In Slot(4, Team 2).SpecialType = 1;
  • End;
  • Wait(3, Ignore Condition);
  • Communicate(Players In Slot(5, Team 2), Thanks);
  • Wait(2, Ignore Condition);
  • Communicate(Players In Slot(4, Team 2), Hello);
  • Wait(1, Ignore Condition);
  • Declare Team Victory(Team 2);
  • }
  • }
  • rule("Unlock the Junkerpocalypse")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Round > 40;
  • }
  • actions
  • {
  • Small Message(All Players(All Teams), Custom String("There's a lot of bosses coming... Good luck!"));
  • Global.TroopRate = 1;
  • Global.TankRate = 0.100;
  • Global.MinibossRate = 0.250;
  • Global.BossRate = 0.500;
  • }
  • }
  • rule("Remove Dummies")
  • {
  • event
  • {
  • Player Died;
  • Team 1;
  • All;
  • }
  • actions
  • {
  • Wait(4, Ignore Condition);
  • Destroy Dummy Bot(Team 1, Slot Of(Event Player));
  • }
  • }
  • rule("Tele Delay")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.TeleDelay == True;
  • }
  • actions
  • {
  • If(Server Load Average > 200);
  • Wait(0.750, Abort When False);
  • Else;
  • Wait(0.250, Abort When False);
  • End;
  • Global.TeleDelay = False;
  • Wait(0.100, Abort When False);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Out of Bounds Force")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • disabled Distance Between(Event Player, Vector(X Component Of(Global.ArenaCenter), Y Component Of(Position Of(Event Player)),
  • Z Component Of(Global.ArenaCenter))) > Global.ArenaSize;
  • disabled Current Map == Map(Junkertown);
  • Global.F == 2;
  • Global.SpecialRound != True;
  • Global.ArenaSize > 0;
  • }
  • actions
  • {
  • Wait(1, Ignore Condition);
  • If(Distance Between(Event Player, Vector(X Component Of(Global.ArenaCenter), Y Component Of(Position Of(Event Player)),
  • Z Component Of(Global.ArenaCenter))) > Global.ArenaSize);
  • Apply Impulse(Event Player, Direction Towards(Event Player, Vector(X Component Of(Global.ArenaCenter), Y Component Of(Position Of(
  • Event Player)) + 3, Z Component Of(Global.ArenaCenter))), 20, To World, Cancel Contrary Motion);
  • Wait(0.500, Abort When False);
  • If(Distance Between(Event Player, Vector(X Component Of(Global.ArenaCenter), Y Component Of(Position Of(Event Player)),
  • Z Component Of(Global.ArenaCenter))) > Global.ArenaSize);
  • Teleport(Event Player, Global.SpawnPos);
  • Set Status(Event Player, Null, Knocked Down, 2);
  • Set Status(Event Player, Null, Invincible, 2.200);
  • Play Effect(All Players(All Teams), Debuff Impact Sound, Color(White), Event Player, 100);
  • Play Effect(All Players(All Teams), Good Explosion, Color(White), Event Player, 1);
  • End;
  • End;
  • Loop If Condition Is True;
  • }
  • }
  • rule("Random Dodging")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.A != Null;
  • }
  • actions
  • {
  • If(Global.Round > 0);
  • Event Player.Loops -= 1;
  • If(Event Player.Loops < 1);
  • Event Player.Loops = 4;
  • If(Distance Between(Event Player, Event Player.A) < Event Player.Range * 0.750);
  • Event Player.Dodge = Random Integer(0, 1) == 0 ? Random Integer(-180, -150) : Random Integer(150, 180);
  • Event Player.DodgeSpeed = 1;
  • Else If(Distance Between(Event Player, Event Player.A) < Event Player.Range * 1);
  • Event Player.Dodge = Random Integer(-180, 180);
  • Event Player.DodgeSpeed = Event Player.Range < 10 ? 1 : Random Real(0.500, 0.650);
  • Else;
  • Event Player.Dodge = Random Integer(-30, 30);
  • Event Player.DodgeSpeed = 1;
  • End;
  • End;
  • Event Player.MissX = Speed Of(Event Player) < 20 ? Random Real(-1 * (Event Player.MissBase + Event Player.Miss * Speed Of(
  • Event Player.A)), Event Player.MissBase + Event Player.Miss * Speed Of(Event Player.A)) : Random Real(-1 * (
  • Event Player.MissBase + 20 * Event Player.Miss), Event Player.MissBase + Event Player.Miss * 20);
  • Event Player.MissY = Speed Of(Event Player) < 20 ? Random Real(-1 * (Event Player.MissBase + Event Player.Miss * Speed Of(
  • Event Player.A)), Event Player.MissBase + Event Player.Miss * Speed Of(Event Player.A)) : Random Real(-1 * (
  • Event Player.MissBase + 20 * Event Player.Miss), Event Player.MissBase + Event Player.Miss * 20);
  • Else;
  • Event Player.Dodge = 0;
  • Event Player.MissX = 0;
  • Event Player.MissY = 0;
  • Event Player.DodgeSpeed = 1;
  • End;
  • Wait(Random Real(0.150, 0.300), Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Reset Armor CD")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 1;
  • All;
  • }
  • conditions
  • {
  • Event Player.ArmorCD == True;
  • }
  • actions
  • {
  • Wait(5, Ignore Condition);
  • Event Player.ArmorCD = False;
  • Wait(0.016, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Friendly Mercy Health CD")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.MercyHPCD == True;
  • }
  • actions
  • {
  • Wait(180, Abort When False);
  • Event Player.MercyHPCD = False;
  • Remove Health Pool From Player(Event Player.MercyHP);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Damage Burn")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Event Player.DmgBurn > 0;
  • }
  • actions
  • {
  • If(Team Of(Event Player) == Team 2);
  • Skip If(Global.J != 1, 2);
  • Start Damage Over Time(Event Player, Null, 9999, 10);
  • Event Player.BurnDOT = Last Damage Over Time ID;
  • Skip If(Global.J != 2, 2);
  • Start Damage Over Time(Event Player, Null, 9999, 15);
  • Event Player.BurnDOT = Last Damage Over Time ID;
  • Skip If(Global.J != 3, 2);
  • Start Damage Over Time(Event Player, Null, 9999, 20);
  • Event Player.BurnDOT = Last Damage Over Time ID;
  • Else;
  • Start Damage Over Time(Event Player, Null, 9999, 60);
  • Event Player.BurnDOT = Last Damage Over Time ID;
  • End;
  • While(Event Player.DmgBurn > 0);
  • Event Player.DmgBurn += -0.250;
  • Set Status(Event Player, Null, Burning, 0.350);
  • Wait(0.250, Ignore Condition);
  • End;
  • Wait(0.100, Ignore Condition);
  • Stop Damage Over Time(Event Player.BurnDOT);
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Heal Burn")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.HealBurn > 0;
  • }
  • actions
  • {
  • Start Heal Over Time(Event Player, Null, 9999, 30);
  • Event Player.HealHOT = Last Heal Over Time ID;
  • Create Effect(All Players(All Teams), Heal Target Effect, Team Of(Event Player), Event Player, 1, Visible To Position and Radius);
  • Event Player.HealFX = Last Created Entity;
  • While(Event Player.HealBurn > 0);
  • Event Player.HealBurn += -0.250;
  • Wait(0.250, Ignore Condition);
  • End;
  • Wait(0.100, Ignore Condition);
  • Stop Heal Over Time(Event Player.HealHOT);
  • Destroy Effect(Event Player.HealFX);
  • Event Player.HealPl = Null;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Durable Mercy and Zenyatta self heal armor")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.SpecialType == 1;
  • (Hero Of(Event Player) == Hero(Mercy) || Hero Of(Event Player) == Hero(Zenyatta)) == True;
  • Event Player.RecentDamage <= 0;
  • (Hero Of(Event Player) == Hero(Zenyatta) || Max Health Of Type(Event Player, Health) - Health Of Type(Event Player, Health) < 1)
  • == True;
  • Max Health Of Type(Event Player, Armor) - Health Of Type(Event Player, Armor) > 0.010;
  • }
  • actions
  • {
  • "Durable Mercy and Zenyatta can self heal their durable modifier armor. This was mostly done so the easy difficulty defense heroes don't permanently lose their armor when playing without a healer, but it seemed like a nice qol change, so players do it too."
  • Heal(Event Player, Event Player, Is Dummy Bot(Event Player) == True ? 1 : 3.750);
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Durable Mercy and Zenyatta self heal armor 2")
  • {
  • event
  • {
  • Player Took Damage;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.SpecialType == 1;
  • (Hero Of(Event Player) == Hero(Mercy) || Hero Of(Event Player) == Hero(Zenyatta)) == True;
  • }
  • actions
  • {
  • Event Player.RecentDamage = 1;
  • }
  • }
  • rule("Durable Mercy and Zenyatta self heal armor 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Event Player.SpecialType == 1;
  • (Hero Of(Event Player) == Hero(Mercy) || Hero Of(Event Player) == Hero(Zenyatta)) == True;
  • Event Player.RecentDamage > 0;
  • }
  • actions
  • {
  • Event Player.RecentDamage += -0.250;
  • Wait(0.250, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Round Unlocks")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.FastMode != True;
  • Global.UnlockLvl < Global.Round;
  • }
  • actions
  • {
  • Global.UnlockLvl += 1;
  • If(Global.UnlockLvl > 26);
  • Else If(Global.UnlockLvl > 25);
  • "Widowmaker attacks faster and grapples to other enemies if a player gets too close."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Widowmaker));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • Wait(1, Ignore Condition);
  • "Brigitte moves faster, increases the health of other enemies, and shield bashes more often in her ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Brigitte));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • Else If(Global.UnlockLvl > 24);
  • "Ultimate form soldier shoots a lot and fires bursts of rockets in his alternate form."
  • Global.UltimateForms = Append To Array(Empty Array, Hero(Soldier: 76));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Ultimate form enemies attack in different and better ways. They have a red orb and are much more dangerous than regular enemies."));
  • Wait(1, Ignore Condition);
  • "Reaper uses his ultimate at close range instead of his regular attack in his ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Reaper));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • Wait(1, Ignore Condition);
  • "Ashe throws lots of dynamite and summons Bob in her ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Ashe));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • Wait(1, Ignore Condition);
  • "Symmetra deploys her turrets in her ultimate form. It seems as if the Workshop damage modification doesn't apply to turrets, so the turrets by themselves are enough for an ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Symmetra));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • Wait(1, Ignore Condition);
  • "Doomfist spams his abilities after encountering an enemy, knocking them all over the place and generally being annoying in his ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Doomfist));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • Wait(1, Ignore Condition);
  • "Torbjorn deploys his turret in his ultimate form."
  • Global.UltimateForms = Append To Array(Global.UltimateForms, Hero(Torbjörn));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Ultimate Form"), Last Of(Global.UltimateForms),
  • Custom String("{0}", Hero Icon String(Last Of(Global.UltimateForms)))));
  • Else If(Global.UnlockLvl > 23);
  • Global.UpgradedMods = True;
  • Else If(Global.UnlockLvl > 22);
  • Small Message(All Players(All Teams), Custom String(
  • "The enemies are gathering their strongest forces! Stronger enemies will appear even more often."));
  • Global.TroopRate = 1;
  • Global.TankRate = 0.250;
  • Global.MinibossRate = 0.250;
  • Global.BossRate = 0.150;
  • Else If(Global.UnlockLvl > 21);
  • "Moira throws orbs in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Moira));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Reinhardt swings his hammer more often in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Reinhardt));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Mercy spawns Torbjorns instead of Reapers when killed in her alternate form"
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Mercy));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Hanzo fires single arrows with a faster attack rate rather than firing multiple arrows then waiting in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Hanzo));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Mei creates ice walls while attacking in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Mei));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Tracer becomes less predictable in her alternate form, gaining the ability to randomly recall or start shooting early."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Tracer));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Wrecking Ball jumps to nearby players and drops on them before attacking in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Wrecking Ball));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Orisa gains the use of her barrier in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Orisa));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Baptiste occasionally uses his Immortality Field in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Baptiste));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Winston picks up other enemies in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Winston));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Else If(Global.UnlockLvl > 20);
  • "Sombra uses her invisibility to get into effective range in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Sombra));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Junkrat places a trap and launches himself into the air with his mine after his regular attack cycle in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Junkrat));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Bastion transforms into his tank form instead of sentry form in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Bastion));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Pharah fires rockets in 3 round bursts with a longer delay rather than faster and one at a time in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Pharah));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Lucio switches between his speed and healing auras in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Lúcio));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Dva only self destructs after her mech is moderately damaged rather than launching it as soon as she sees an enemy in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(D.Va));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Genji uses his deflect in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Genji));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "McCree fires more precise shots one at a time in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(McCree));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Sigma floats in the air and his Kinetic Grasp pulls everyone to him in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Sigma));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Else If(Global.UnlockLvl > 19);
  • "Soldier gains the use of his Helix Rocket in his alternate form"
  • Global.AlternateForms = Append To Array(Empty Array, Hero(Soldier: 76));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Alternate Form Enemies attack differently and have a white orb over their heads"));
  • Wait(1, Ignore Condition);
  • "Reaper uses Wraith Form to get close in his alternate form"
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Reaper));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Ashe shoots in addition to throwing dynamite in her alternate form"
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Ashe));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Symmetra shoots 3 small orbs instead of 1 big orb in her alternate form"
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Symmetra));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Doomfist attempts to knock players into the air instead of punching at close range in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Doomfist));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Brigitte shield bashes instead of using her mace at close range in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Brigitte));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Zenyatta throws several orbs in bursts instead of throwing individual orbs in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Zenyatta));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Roadhog uses his longer ranged secondary fire instead of his primary fire in his alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Roadhog));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Wait(1, Ignore Condition);
  • "Widowmaker shoots faster, but doesn't fully charge her shots in her alternate form."
  • Global.AlternateForms = Append To Array(Global.AlternateForms, Hero(Widowmaker));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked Alternate Form"), Last Of(
  • Global.AlternateForms), Custom String("{0}", Hero Icon String(Last Of(Global.AlternateForms)))));
  • Else If(Global.UnlockLvl > 18);
  • Small Message(All Players(All Teams), Custom String("Stronger enemies will now appear more often"));
  • Global.TroopRate = 1;
  • Global.TankRate = 0.350;
  • Global.MinibossRate = 0.100;
  • Global.BossRate = 0.050;
  • Else If(Global.UnlockLvl > 17);
  • Global.TypeUnlock = 8;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Burning Enemies {0}", Icon String(
  • Fire))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Burning Enemies {0} set anything they damage on fire.", Icon String(Fire)));
  • Else If(Global.UnlockLvl > 16);
  • Global.TypeUnlock = 7;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Floating Enemies {0}",
  • Ability Icon String(Hero(Mercy), Button(Ability 1)))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Floating Enemies {0} jump and stay in the air longer.", Ability Icon String(
  • Hero(Mercy), Button(Ability 1))));
  • Else If(Global.UnlockLvl > 15);
  • Global.TypeUnlock = 6;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Exploding Enemies {0}", Icon String(
  • Radioactive))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Exploding Enemies {0} deal damage in an area when they're killed.",
  • Icon String(Radioactive)));
  • Else If(Global.UnlockLvl > 14);
  • Global.TypeUnlock = 5;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Strong Enemies {0}", Icon String(
  • Bolt))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Strong Enemies {0} have more health and damage than regular enemies, but move slower.", Icon String(Bolt)));
  • Else If(Global.UnlockLvl > 13);
  • Global.TypeUnlock = 4;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Fast Enemies {0}", Icon String(
  • Ring Thin))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Fast Enemies {0} move faster than regular enemies, but have less damage and health.", Icon String(Ring Thin)));
  • Else If(Global.UnlockLvl > 12);
  • Global.TypeUnlock = 3;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Life Stealing Enemies {0}", Icon String(
  • Spiral))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Life Stealing Enemies {0} heal when they do damage.", Icon String(Spiral)));
  • Else If(Global.UnlockLvl > 11);
  • Global.TypeUnlock = 2;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Deadly Enemies {0}", Icon String(
  • Skull))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Deadly Enemies {0} have more damage, but less health.", Icon String(Skull)));
  • Else If(Global.UnlockLvl > 10);
  • Global.TypeUnlock = 1;
  • Small Message(All Players(All Teams), String("{0} {1}", String("Unlocked"), Custom String("Durable Enemies {0}",
  • Ability Icon String(Hero(Brigitte), Button(Secondary Fire)))));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Durable Enemies {0} have more health, but less damage.", Ability Icon String(
  • Hero(Brigitte), Button(Secondary Fire))));
  • Else If(Global.UnlockLvl > 9);
  • Global.SpecialRound = True;
  • Else If(Global.UnlockLvl > 8);
  • "Tracer blinks around players and fires in short bursts. Much like Genji she can quickly begin attacking from unexpected angles and is a potential problem for the defense hero"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Tracer));
  • Wait(1, Ignore Condition);
  • "Wrecking Ball is like a rolling Bastion. He does lots of damage and can easily get close, but his long reload time leaves him vulnerable to attacks"
  • Global.BossList = Append To Array(Global.BossList, Hero(Wrecking Ball));
  • Wait(1, Ignore Condition);
  • "Orisa by herself isn't a huge issue. Primarily she enables other enemies by launching everyone out from behind cover using her Fortify bounce and placing her Supercharger."
  • Global.BossList = Append To Array(Global.BossList, Hero(Orisa));
  • Wait(1, Ignore Condition);
  • "Baptiste is a ranged healer enemy. Baptiste doesn't do a lot of damage, but the enemies around him slowly heal."
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Baptiste));
  • Wait(1, Ignore Condition);
  • "Ana is the first enemy healer that intentionally targets other enemies instead of healing through a passive."
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Ana));
  • Wait(1, Ignore Condition);
  • "Zarya is a disruptive miniboss that pulls players close and uses a strong melee attack to push them away again if they get too close."
  • Global.BossList = Append To Array(Global.BossList, Hero(Zarya));
  • Wait(1, Ignore Condition);
  • "Echo is similar to other close range enemies except she flies backwards after each attack and flies closer to players if she's too far."
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Echo));
  • Else If(Global.UnlockLvl > 7);
  • "Reinhardt behaves similarly to Brigitte. He attempts to block as much damage as possible with his shield then does big damage with his hammer if you let him get too close! If you get too far away he can charge!"
  • Global.BossList = Append To Array(Global.BossList, Hero(Reinhardt));
  • Wait(1, Ignore Condition);
  • "There's a way to get Mercy to leave without dropping a pile of Reapers on you... Just say hello back to her!"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Mercy));
  • Wait(1, Ignore Condition);
  • "Hanzo is a basic projectile enemy. He fires several slow storm arrows after waiting for a while. They're easy to dodge, but can do a lot of damage if they all hit"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Hanzo));
  • Wait(1, Ignore Condition);
  • "Mei is the second blocking minitank. She attempts to get very close then uses her Ice Block after taking damage. This can act as a shield for nearby enemies. Her weapon also applies a weak slow effect"
  • Global.TankList = Append To Array(Global.TankList, Hero(Mei));
  • Else If(Global.UnlockLvl > 6);
  • "The shortest range basic troop. If he gets close enough he dashes, which can be an issue for the defense hero at higher difficulties"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Genji));
  • Wait(1, Ignore Condition);
  • "McCree has more health than the other ranged mini tanks, but he doesn't have as much range. He fires in quick inaccurate bursts"
  • Global.TankList = Append To Array(Global.TankList, Hero(McCree));
  • Wait(1, Ignore Condition);
  • "Sigma is the first long range boss. His orbs are very difficult to avoid and do lots of damage!"
  • Global.BossList = Append To Array(Global.BossList, Hero(Sigma));
  • Wait(1, Ignore Condition);
  • "Moira attacks using her ultimate that goes through players and barriers. The damage isn't that much, but it could be an issue for the defense hero if the healers aren't paying attention"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Moira));
  • Else If(Global.UnlockLvl > 5);
  • "As you would probably expect Bastion just shoots at things in Sentry form"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Bastion));
  • Wait(1, Ignore Condition);
  • "A flying basic troop! Pharahs fly around and shoot rockets"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Pharah));
  • Wait(1, Ignore Condition);
  • "Lucio speed boosts the other enemies! He can be a big problem if slow close range enemies are nearby"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Lúcio));
  • Wait(1, Ignore Condition);
  • "D.Va launches exploding mechs at you. If you can damage her out of her mech she gets stunned and won't be able to call a new mech to launch at you. This is important if you want to defeat her!"
  • Global.BossList = Append To Array(Global.BossList, Hero(D.Va));
  • Else If(Global.UnlockLvl > 4);
  • "The first boss! Roadhog is essentially a stronger version of Reaper and Torbjorn. He uses his hook sometimes as well!"
  • Global.BossList = Append To Array(Global.BossList, Hero(Roadhog));
  • Wait(1, Ignore Condition);
  • "Like other basic troop types Sombras aren't that threatening alone, but many of them can spawn together! They attack from a closer range than most other regular troops and have a little extra health"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Sombra));
  • Wait(1, Ignore Condition);
  • "Junkrat is the second ranged enemy that's considered a mini tank for spawning purposes. He fires 3 high damage bombs that have more than normal knockback"
  • Global.TankList = Append To Array(Global.TankList, Hero(Junkrat));
  • Wait(1, Ignore Condition);
  • "Winston by himself mostly just knocks you around and has a ton of health, but when he's backed up by other enemies he can quickly knock the defense hero into dangererous positions"
  • Global.BossList = Append To Array(Global.BossList, Hero(Winston));
  • Else If(Global.UnlockLvl > 3);
  • "The first miniboss! He's basically just a stronger Reaper"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Torbjörn));
  • Wait(1, Ignore Condition);
  • "Long range damage! They attack slowly, but if several of them fire at once they can do a lot of damage in a short time!"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Widowmaker));
  • Wait(1, Ignore Condition);
  • "All of the actual tanks are reserved for being bosses, so Brigitte is like a tank for the regular enemies! She has low damage and lots of health"
  • Global.TankList = Append To Array(Global.TankList, Hero(Brigitte));
  • Wait(1, Ignore Condition);
  • "Another miniboss! He mostly just applies his Discord Orb to players and has a bunch of health"
  • Global.MinibossList = Append To Array(Global.MinibossList, Hero(Zenyatta));
  • Else If(Global.UnlockLvl > 2);
  • "The behavior of Reapers and Soldiers is very similar to the Talon Soldiers and Enforcers in the Archives missions"
  • Global.TankList = Append To Array(Global.TankList, Hero(Reaper));
  • Wait(1, Ignore Condition);
  • "They only throw dynamite, but the damage over time can be a problem for the defense hero if there's no healer!"
  • Global.TroopList = Append To Array(Global.TroopList, Hero(Ashe));
  • Wait(1, Ignore Condition);
  • "Symmetra acts like a ranged version of Reaper. The orbs are slow and easily dodged, but can do a lot of damage!"
  • Global.TankList = Append To Array(Global.TankList, Hero(Symmetra));
  • Wait(1, Ignore Condition);
  • "Doomfist is very slow, but his punch can do a lot of damage if he gets close enough to use it!"
  • Global.TankList = Append To Array(Global.TankList, Hero(Doomfist));
  • Else If(Global.UnlockLvl > -1);
  • "Different enemies are unlocked as you progress"
  • Global.TroopList = Append To Array(Empty Array, Hero(Soldier: 76));
  • disabled Global.AlternateForms = Array(Hero(Echo));
  • disabled Global.UltimateForms = Array(Hero(Echo));
  • Global.TankList = Empty Array;
  • Global.MinibossList = Empty Array;
  • Global.BossList = Empty Array;
  • Global.Enemies = Empty Array;
  • End;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • rule("Fast Mode Unlocks")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.FastMode == True;
  • Global.UnlockLvl < Global.Round;
  • }
  • actions
  • {
  • Global.UnlockLvl += 1;
  • If(Global.UnlockLvl > 9);
  • Else If(Global.UnlockLvl > 8);
  • Global.UltimateForms = Array(Hero(Soldier: 76), Hero(Reaper), Hero(Ashe), Hero(Symmetra), Hero(Doomfist), Hero(Torbjörn), Hero(
  • Widowmaker), Hero(Brigitte), Hero(Zenyatta), Hero(Sombra), Hero(Junkrat), Hero(Pharah), Hero(Bastion), Hero(Lúcio), Hero(
  • Genji), Hero(McCree), Hero(Moira), Hero(Mercy), Hero(Hanzo), Hero(Mei), Hero(Tracer), Hero(Baptiste), Hero(Ana), Hero(Echo));
  • Small Message(All Players(All Teams), Custom String("Unlocked Ultimate Form Enemies"));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Ultimate form enemies attack in different and better ways. They have a red orb and are much more dangerous than regular enemies."));
  • Else If(Global.UnlockLvl > 7);
  • Global.UpgradedMods = True;
  • Global.TroopRate = 1;
  • Global.TankRate = 0.250;
  • Global.MinibossRate = 0.250;
  • Global.BossRate = 0.150;
  • Else If(Global.UnlockLvl > 6);
  • Global.AlternateForms = Filtered Array(All Heroes, (Current Array Element != Hero(Torbjörn) && Current Array Element != Hero(Ana)
  • && Current Array Element != Hero(Zarya) && Hero Of(Current Array Element) != Hero(Echo) && True) == True);
  • Small Message(All Players(All Teams), Custom String("Unlocked Alternate Form Enemies"));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Alternate Form Enemies attack differently and have a white orb over their heads"));
  • Else If(Global.UnlockLvl > 5);
  • Global.TypeUnlock = 8;
  • Global.TroopRate = 1;
  • Global.TankRate = 0.350;
  • Global.MinibossRate = 0.100;
  • Global.BossRate = 0.050;
  • Small Message(All Players(All Teams), Custom String("Unlocked Modifiers"));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Enemies can now spawn with one of 8 modifiers"));
  • Wait(4, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Durable Enemies {0} have more health, but less damage.", Ability Icon String(
  • Hero(Brigitte), Button(Secondary Fire))));
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Deadly Enemies {0} have more damage, but less health.", Icon String(Skull)));
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Life Stealing Enemies {0} heal when they do damage.", Icon String(Spiral)));
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Fast Enemies {0} move faster than regular enemies, but have less damage and health.", Icon String(Ring Thin)));
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String(
  • "Strong Enemies {0} have more health and damage than regular enemies, but move slower.", Icon String(Bolt)));
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Exploding Enemies {0} deal damage in an area when they're killed.",
  • Icon String(Radioactive)));
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Floating Enemies {0} jump and stay in the air longer.", Ability Icon String(
  • Hero(Mercy), Button(Ability 1))));
  • Wait(2, Ignore Condition);
  • Small Message(All Players(All Teams), Custom String("Burning Enemies {0} set anything they damage on fire.", Icon String(Fire)));
  • Else If(Global.UnlockLvl > 4);
  • Global.SpecialRound = True;
  • Else If(Global.UnlockLvl > 3);
  • Global.TankList = Append To Array(Global.TankList, Random Value In Array(Global.RandomTank));
  • Global.RandomTank = Filtered Array(Global.RandomTank, Current Array Element != Last Of(Global.TankList));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked New Enemy:"), Last Of(Global.TankList),
  • Hero Icon String(Last Of(Global.TankList))));
  • Wait(1, Ignore Condition);
  • Global.MinibossList = Append To Array(Global.MinibossList, Random Value In Array(Global.RandomMiniboss));
  • Global.RandomMiniboss = Filtered Array(Global.RandomMiniboss, Current Array Element != Last Of(Global.MinibossList));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked New Enemy:"), Last Of(Global.MinibossList),
  • Hero Icon String(Last Of(Global.MinibossList))));
  • Wait(1, Ignore Condition);
  • Global.TroopList = Append To Array(Global.TroopList, Random Value In Array(Global.RandomTroop));
  • Global.RandomTroop = Filtered Array(Global.RandomTroop, Current Array Element != Last Of(Global.TroopList));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked New Enemy:"), Last Of(Global.TroopList),
  • Hero Icon String(Last Of(Global.TroopList))));
  • Wait(1, Ignore Condition);
  • Global.BossList = Append To Array(Global.BossList, Random Value In Array(Global.RandomBoss));
  • Global.RandomBoss = Filtered Array(Global.RandomBoss, Current Array Element != Last Of(Global.BossList));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked New Enemy:"), Last Of(Global.BossList),
  • Hero Icon String(Last Of(Global.BossList))));
  • Else If(Global.UnlockLvl > 2);
  • Global.TankList = Append To Array(Global.TankList, Random Value In Array(Global.RandomTank));
  • Global.RandomTank = Filtered Array(Global.RandomTank, Current Array Element != Last Of(Global.TankList));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked New Enemy:"), Last Of(Global.TankList),
  • Hero Icon String(Last Of(Global.TankList))));
  • Wait(1, Ignore Condition);
  • Global.MinibossList = Append To Array(Global.MinibossList, Random Value In Array(Global.RandomMiniboss));
  • Global.RandomMiniboss = Filtered Array(Global.RandomMiniboss, Current Array Element != Last Of(Global.MinibossList));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked New Enemy:"), Last Of(Global.MinibossList),
  • Hero Icon String(Last Of(Global.MinibossList))));
  • Wait(1, Ignore Condition);
  • Global.TroopList = Append To Array(Global.TroopList, Random Value In Array(Global.RandomTroop));
  • Global.RandomTroop = Filtered Array(Global.RandomTroop, Current Array Element != Last Of(Global.TroopList));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked New Enemy:"), Last Of(Global.TroopList),
  • Hero Icon String(Last Of(Global.TroopList))));
  • Else If(Global.UnlockLvl > 1);
  • Global.TroopList = Append To Array(Global.TroopList, Random Value In Array(Global.RandomTroop));
  • Global.RandomTroop = Filtered Array(Global.RandomTroop, Current Array Element != Last Of(Global.TroopList));
  • Small Message(All Players(All Teams), String("{0} {1} {2}", Custom String("Unlocked New Enemy:"), Last Of(Global.TroopList),
  • Hero Icon String(Last Of(Global.TroopList))));
  • Else If(Global.UnlockLvl > -1);
  • Global.TroopList = Append To Array(Empty Array, Random Value In Array(Global.RandomTroop));
  • Global.RandomTroop = Filtered Array(Global.RandomTroop, Current Array Element != Last Of(Global.TroopList));
  • Global.TankList = Empty Array;
  • Global.MinibossList = Empty Array;
  • Global.BossList = Empty Array;
  • Global.Enemies = Empty Array;
  • Global.TankList = Append To Array(Global.TankList, Random Value In Array(Global.RandomTank));
  • Global.RandomTank = Filtered Array(Global.RandomTank, Current Array Element != Last Of(Global.TankList));
  • End;
  • Wait(0.100, Ignore Condition);
  • Loop If Condition Is True;
  • }
  • }
  • disabled rule("EZ Mode for Testing Stuff")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • }
  • actions
  • {
  • "These are development rules. They help set up the maps and test the enemies!"
  • disabled Create Dummy Bot(Hero(Baptiste), Team 2, 5, Event Player, Vector(0, 0, 0));
  • Small Message(Event Player, Position Of(Event Player));
  • Event Player.W = Position Of(Event Player);
  • Set Status(Event Player, Null, Invincible, 9999);
  • Set Damage Dealt(Event Player, 5000);
  • Destroy Effect(Event Player.X);
  • Wait(0.100, Ignore Condition);
  • Create Effect(All Players(All Teams), Sphere, Color(White), Event Player.W, Event Player.Y, Visible To Position and Radius);
  • Event Player.X = Last Created Entity;
  • Wait(1, Abort When False);
  • Clear Status(Event Player, Invincible);
  • Set Damage Dealt(Event Player, 100);
  • Destroy Effect(Event Player.X);
  • }
  • }
  • disabled rule("EZ Mode for Testing Stuff 2")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Primary Fire)) == True;
  • }
  • actions
  • {
  • Event Player.Y += 1;
  • }
  • }
  • disabled rule("EZ Mode for Testing Stuff 3")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Secondary Fire)) == True;
  • }
  • actions
  • {
  • Event Player.Y += -1;
  • }
  • }
  • disabled rule("EZ Mode for Testing Stuff 4")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • Team 2;
  • All;
  • }
  • conditions
  • {
  • Is Alive(Event Player) == True;
  • Has Spawned(Event Player) == True;
  • }
  • actions
  • {
  • Start Heal Over Time(Event Player, Event Player, 9999, 50);
  • }
  • }
  • rule("Originally made by Squ1dward#1665")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • actions
  • {
  • disabled Create HUD Text(All Players(All Teams), Custom String("Server Load: {0}", Server Load Average), Null, Null, Left, 0, Color(White),
  • Color(White), Color(White), Visible To and String, Default Visibility);
  • }
  • }
  • rule("What's New in Version 2.82?")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("1. Enemies are now more likely to retarget to players with the durable modifier!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("2. Enemy Roadhogs now indicate when they're about to attack by reloading before firing!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("3. The player strong upgrade has been reworked! It now reduces the effectiveness of enemy knockback and stuns!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("4. The durable modifier has been changed! It now adds an additional 25 armor health to tanks and 100 to other heroes!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("5. More enemies now have ultimate forms!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("6. The defense hero is now smarter and will attempt to stay behind the players when enemies are nearby!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("7. The upgraded fast modifier now gives the player a new ability!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("8. Balance changes!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("9. The default modifier selection is now randomized!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
  • rule("10. Rebalanced the hard difficulty!")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • }
Join the Workshop.codes Discord