Create
Return to post

Comparing difference between and

View raw
  • settings
  • {
  • main
  • {
  • Description: "Great Over Watch Off (code 2177F): A three-round deathmatch inspired by a certain UK baking program. Compete in signature, technical and showstopper challenges. Don't be the soggy bottom or cause a Bingate...or should you? Version 1.0 (2020-03-01) by kdau#1430. More info at https://workshop.codes/2177F"
  • }
  • lobby
  • {
  • Max FFA Players: 8
  • Max Spectators: 4
  • }
  • modes
  • {
  • Deathmatch
  • {
  • enabled maps
  • {
  • Black Forest
  • Castillo
  • Château Guillard
  • Ecopoint: Antarctica
  • Kanezaka
  • Necropolis
  • Petra
  • }
  • }
  • General
  • {
  • Allow Hero Switching: Off
  • Game Length In Minutes: 9
  • Game Mode Start: Immediately
  • Hero Limit: Off
  • Score To Win: 999
  • }
  • }
  • heroes
  • {
  • General
  • {
  • Ability Cooldown Time: 50%
  • Ultimate Ability: Off
  • Ana
  • {
  • No Automatic Fire: On
  • Quick Melee: Off
  • }
  • Ashe
  • {
  • No Automatic Fire: On
  • Quick Melee: Off
  • }
  • Brigitte
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • Repair Pack: Off
  • }
  • D.Va
  • {
  • Micro Missiles Cooldown Time: 33%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Doomfist
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • Rocket Punch Cooldown Time: 200%
  • }
  • Echo
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Genji
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Hanzo
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Junkrat
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Lúcio
  • {
  • Damage Dealt: 250%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • McCree
  • {
  • Damage Dealt: 70%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Mei
  • {
  • Cryo-Freeze Cooldown Time: 75%
  • Damage Dealt: 125%
  • Quick Melee: Off
  • Secondary Fire: Off
  • Weapon Freeze Duration Scalar: 110%
  • }
  • Moira
  • {
  • Biotic Orb Cooldown Time: 40%
  • Biotic Orb Max Damage Scalar: 120%
  • Primary Fire: Off
  • Quick Melee: Off
  • Secondary Fire: Off
  • }
  • Reinhardt
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Roadhog
  • {
  • Quick Melee: Off
  • Secondary Fire: Off
  • }
  • Sigma
  • {
  • Accretion Cooldown Time: 20%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Soldier: 76
  • {
  • Biotic Field Cooldown Time: 75%
  • Helix Rockets Cooldown Time: 45%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Symmetra
  • {
  • Damage Dealt: 85%
  • Primary Fire: Off
  • Quick Melee: Off
  • Sentry Turret Cooldown Time: 120%
  • }
  • Torbjörn
  • {
  • Quick Melee: Off
  • Weapons Enabled: Forge Hammer Only
  • }
  • Tracer
  • {
  • Damage Dealt: 150%
  • Primary Fire: Off
  • }
  • Widowmaker
  • {
  • Ammunition Clip Size Scalar: 29%
  • Damage Dealt: 80%
  • No Automatic Fire: On
  • Quick Melee: Off
  • }
  • Winston
  • {
  • Damage Dealt: 200%
  • Primary Fire: Off
  • }
  • Wrecking Ball
  • {
  • Damage Dealt: 135%
  • Primary Fire: Off
  • Quick Melee: Off
  • Roll Always Active: On
  • }
  • Zarya
  • {
  • Damage Dealt: 110%
  • Primary Fire: Off
  • Projected Barrier: Off
  • Quick Melee: Off
  • }
  • Zenyatta
  • {
  • Ammunition Clip Size Scalar: 75%
  • Damage Dealt: 70%
  • Orb of Harmony: Off
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • disabled heroes
  • {
  • Baptiste
  • Bastion
  • Mercy
  • Orisa
  • Pharah
  • Reaper
  • Sombra
  • }
  • }
  • }
  • main
  • {
  • Description: "Great Over Watch Off (code 2177F): A three-round deathmatch inspired by a certain UK baking program. Compete in signature, technical and showstopper challenges. Don't be the soggy bottom or cause a Bingate...or should you? Version 1.1.1 (2021-03-16) by kdau#1430. More info at https://workshop.codes/2177F"
  • }
  • lobby
  • {
  • Max FFA Players: 12
  • Max Spectators: 4
  • }
  • modes
  • {
  • General
  • {
  • Allow Hero Switching: Off
  • Game Length In Minutes: 9
  • Game Mode Start: Immediately
  • Hero Limit: Off
  • }
  • Deathmatch
  • {
  • Score To Win: 50
  • enabled maps
  • {
  • Black Forest
  • Castillo
  • Château Guillard
  • Ecopoint: Antarctica
  • Kanezaka
  • Necropolis
  • Petra
  • }
  • }
  • }
  • heroes
  • {
  • General
  • {
  • Ability Cooldown Time: 50%
  • Ultimate Ability: Off
  • Ultimate Generation: 500%
  • Ana
  • {
  • No Automatic Fire: On
  • Quick Melee: Off
  • }
  • Ashe
  • {
  • No Automatic Fire: On
  • Quick Melee: Off
  • }
  • Brigitte
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • Repair Pack: Off
  • }
  • D.va
  • {
  • Micro Missiles Cooldown Time: 33%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Doomfist
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • Rocket Punch Cooldown Time: 125%
  • }
  • Echo
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Genji
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Hanzo
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Junkrat
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Lúcio
  • {
  • Damage Dealt: 250%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Mccree
  • {
  • Damage Dealt: 70%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Mei
  • {
  • Cryo-Freeze Cooldown Time: 75%
  • Damage Dealt: 125%
  • Quick Melee: Off
  • Secondary Fire: Off
  • Weapon Freeze Duration Scalar: 110%
  • }
  • Moira
  • {
  • Biotic Orb Cooldown Time: 40%
  • Biotic Orb Max Damage Scalar: 120%
  • Primary Fire: Off
  • Quick Melee: Off
  • Secondary Fire: Off
  • }
  • Reinhardt
  • {
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Roadhog
  • {
  • Quick Melee: Off
  • Secondary Fire: Off
  • }
  • Sigma
  • {
  • Accretion Cooldown Time: 20%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Soldier: 76
  • {
  • Biotic Field Cooldown Time: 75%
  • Helix Rockets Cooldown Time: 45%
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • Symmetra
  • {
  • Damage Dealt: 85%
  • Primary Fire: Off
  • Quick Melee: Off
  • Sentry Turret Cooldown Time: 120%
  • }
  • Torbjörn
  • {
  • Quick Melee: Off
  • Weapons Enabled: Forge Hammer Only
  • }
  • Tracer
  • {
  • Damage Dealt: 150%
  • Primary Fire: Off
  • }
  • Widowmaker
  • {
  • Ammunition Clip Size Scalar: 29%
  • Damage Dealt: 80%
  • No Automatic Fire: On
  • Quick Melee: Off
  • }
  • Winston
  • {
  • Damage Dealt: 200%
  • Primary Fire: Off
  • }
  • Wrecking Ball
  • {
  • Damage Dealt: 135%
  • Primary Fire: Off
  • Quick Melee: Off
  • Roll Always Active: On
  • }
  • Zarya
  • {
  • Damage Dealt: 110%
  • Primary Fire: Off
  • Projected Barrier: Off
  • Quick Melee: Off
  • }
  • Zenyatta
  • {
  • Ammunition Clip Size Scalar: 75%
  • Damage Dealt: 70%
  • Orb Of Harmony: Off
  • Primary Fire: Off
  • Quick Melee: Off
  • }
  • disabled heroes
  • {
  • Baptiste
  • Bastion
  • Mercy
  • Orisa
  • Pharah
  • Reaper
  • Sombra
  • }
  • }
  • }
  • }
  • variables
  • {
  • global:
  • 0: Challenge
  • 1: InstructionsID
  • 2: TechnicalHero
  • 3: UnusedHeroes
  • 4: SoggyBottom
  • 5: BingateAttacker
  • 6: BingateVictim
  • 7: LastSoggyBottomChange
  • 8: LoopIter
  • 9: Scratch1
  • 10: Scratch2
  • 13: LoopMax
  • player:
  • 0: ChosenHero
  • 1: SoggyEffect
  • 2: DeathsInChallenge
  • 3: KillsInChallenge
  • 4: LastDeathTime
  • 5: LastKiller
  • }
  • global:
  • 0: _extendedGlobalCollection
  • 1: _arrayBuilder
  • 2: ChallengeDuration
  • 3: Challenge
  • 4: UnusedHeroes
  • 5: TechnicalHero
  • 6: InstructionsID
  • 7: RecognizeSoggyBottom
  • 8: SoggyBottomImmortalityDuration
  • 9: CurrentSoggyBottom
  • 10: LastSoggyBottomChange
  • 11: RecognizeBingate
  • 12: BingateBonusPoints
  • 13: BingateAttacker
  • 14: BingateVictim
  • 15: TestingCommands
  • 16: DummyBots
  • 17: RecognizeSelfDamage
  • 18: spawnCount
  • 19: i
  • 20: player
  • 21: maxDeaths
  • 22: candidates
  • 23: newSoggyBottom
  • player:
  • 0: _extendedPlayerCollection
  • 1: ChosenHero
  • 2: KillsInChallenge
  • 3: DeathsInChallenge
  • 4: LastDeathTime
  • 5: LastKiller
  • 6: SoggyBottomEffect
  • }
  • // Extended collection variables:
  • // global [0]: _arrayBuilderStore
  • // global [1]: foreachIndex,
  • // Class identifiers:
  • subroutines
  • {
  • 0: IntroduceChallenge
  • 1: SpawnDummies
  • 2: SetUpChallenge
  • 3: UpdateSoggyBottom
  • 4: AnnounceBingate
  • 5: CleanUpSoggyBottom
  • 6: FindUnusedHeroes
  • 0: FindUnusedHeroes
  • 1: SetUpChallenge
  • 2: CleanUpSoggyBottom
  • 3: SpawnDummies
  • 4: IntroduceChallenge
  • 5: ResetPrimaryFire
  • 6: UpdateSoggyBottom
  • 7: AnnounceBingate
  • }
  • rule("Sub: Find Unused Heroes")
  • {
  • event
  • {
  • Subroutine;
  • FindUnusedHeroes;
  • }
  • actions
  • {
  • "Only include heroes allowed in this mode."
  • Global.UnusedHeroes = Randomized Array(Allowed Heroes(All Players(All Teams)));
  • "Exclude heroes being used by players."
  • Modify Global Variable(UnusedHeroes, Remove From Array By Value, Mapped Array(All Players(All Teams), Hero Of(
  • Current Array Element)));
  • "Remove the heroes whose limited kits need Quick Melee."
  • Modify Global Variable(UnusedHeroes, Remove From Array By Value, Array(Hero(Tracer), Hero(Winston)));
  • }
  • event
  • {
  • Subroutine;
  • FindUnusedHeroes;
  • }
  • // Action count: 3
  • actions
  • {
  • Set Global Variable(UnusedHeroes, Randomized Array(Allowed Heroes(Host Player)));
  • Modify Global Variable(UnusedHeroes, Remove From Array By Value, Mapped Array(All Players(Team(All)), Hero Of(Current Array Element)));
  • Modify Global Variable(UnusedHeroes, Remove From Array By Value, Array(Hero(D.va), Hero(Tracer), Hero(Winston)));
  • }
  • }
  • rule("Sub: Set Up a Challenge")
  • rule("Global: Set Up the Match")
  • {
  • event
  • {
  • Subroutine;
  • SetUpChallenge;
  • }
  • actions
  • {
  • "Time is unpaused by IntroduceChallenge."
  • Pause Match Time;
  • "Each challenge lasts for 3 minutes."
  • Set Match Time(180);
  • "Make sure the end of the match isn't triggered prematurely when the Challenge variable is updated."
  • Wait Until(Match Time > 1, 99999);
  • "Reset all players' deaths and kills for the challenge. These actions must be in a global event for timing reasons."
  • For Global Variable(LoopIter, 0, Count Of(All Players(All Teams)), 1);
  • All Players(All Teams)[Global.LoopIter].DeathsInChallenge = 0;
  • All Players(All Teams)[Global.LoopIter].KillsInChallenge = 0;
  • End;
  • "Clean up from any previous Soggy Bottom."
  • Call Subroutine(CleanUpSoggyBottom);
  • }
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global Variable(Challenge) == Null;
  • }
  • // Action count: 25
  • actions
  • {
  • Set Global Variable(ChallengeDuration, Multiply(60, Workshop Setting Integer(Custom String("General", Null, Null, Null), Custom String("Challenge Duration (Minutes)", Null, Null, Null), 3, 1, 10, 0)));
  • Create HUD Text(All Players(Team(All)), Null, Null, Custom String("Great Over Watch Off", Null, Null, Null), Left, 0.1, Color(Blue), Color(Blue), Color(Blue), Visible To, Visible Always);
  • Create HUD Text(All Players(Team(All)), Null, Custom String("Creator: kdau#1430\nWorkshop Code: 2177F\n", Null, Null, Null), Null, Left, 0.2, Color(Blue), Color(Blue), Color(Blue), Visible To, Visible Always);
  • Create HUD Text(All Players(Team(All)), Null, Custom String(".", Null, Null, Null), Null, Right, 0.1, Color(White), Color(White), Color(White), Visible To, Visible Always);
  • Set Global Variable(RecognizeSoggyBottom, Workshop Setting Toggle(Custom String("General", Null, Null, Null), Custom String("Recognize Soggy Bottoms", Null, Null, Null), True, 101));
  • Set Global Variable(SoggyBottomImmortalityDuration, Workshop Setting Integer(Custom String("General", Null, Null, Null), Custom String("Soggy Bottom Immortality (Seconds)", Null, Null, Null), 15, 0, 60, 102));
  • If(Not(Global Variable(RecognizeSoggyBottom)));
  • Skip(2);
  • End;
  • Create HUD Text(If-Then-Else(Compare(Global Variable(Challenge), !=, 3), All Players(Team(All)), Empty Array), Custom String("Soggy Bottom", Null, Null, Null), Custom String("- Most deaths this challenge\n- Gets wallhacks\n- Immortal for {0} sec (aura)", Global Variable(SoggyBottomImmortalityDuration), Null, Null), If-Then-Else(Compare(Global Variable(CurrentSoggyBottom), !=, Null), Custom String("{0} {1}", Hero Icon String(Hero Of(Global Variable(CurrentSoggyBottom))), Global Variable(CurrentSoggyBottom), Null), Custom String("{0} (None Yet)", Icon String(No), Null, Null)), Right, 0.2, Color(Aqua), Color(Aqua), Color(Aqua), Visible To And String, Visible Always);
  • Set Global Variable(RecognizeBingate, Workshop Setting Toggle(Custom String("General", Null, Null, Null), Custom String("Recognize Bingates", Null, Null, Null), True, 201));
  • Set Global Variable(BingateBonusPoints, Workshop Setting Integer(Custom String("General", Null, Null, Null), Custom String("Bingate Bonus Points", Null, Null, Null), 1, -1, 3, 202));
  • If(Not(Global Variable(RecognizeBingate)));
  • Skip(2);
  • End;
  • Create HUD Text(If-Then-Else(Compare(Global Variable(Challenge), ==, 3), All Players(Team(All)), Empty Array), Custom String("Bingate", Null, Null, Null), Custom String("- Ult shutdown by final blow\n- {0} bonus point(s) for killer\nMost recent:", Global Variable(BingateBonusPoints), Null, Null), If-Then-Else(Compare(Global Variable(BingateAttacker), !=, Null), Custom String("{0} {1} {2}", Global Variable(BingateAttacker), Icon String(X), Global Variable(BingateVictim)), Custom String("{0} (None Yet)", Icon String(No), Null, Null)), Right, 0.2, Color(Purple), Color(Purple), Color(Purple), Visible To And String, Visible Always);
  • Set Global Variable(TestingCommands, Workshop Setting Toggle(Custom String("Testing", Null, Null, Null), Custom String("Allow Testing Commands", Null, Null, Null), False, 0));
  • Set Global Variable(DummyBots, Workshop Setting Toggle(Custom String("Testing", Null, Null, Null), Custom String("Spawn Placeholder Bots", Null, Null, Null), False, 1));
  • Set Global Variable(RecognizeSelfDamage, Workshop Setting Toggle(Custom String("Testing", Null, Null, Null), Custom String("Recognize Self-Damage Deaths", Null, Null, Null), False, 2));
  • Disable Built-In Game Mode Completion;
  • Disable Built-In Game Mode Announcer;
  • Wait Until(Is Game In Progress, 99999);
  • Wait Until(Is True For All(All Players(Team(All)), Has Spawned(Current Array Element)), 3);
  • Call Subroutine(FindUnusedHeroes);
  • Set Global Variable(Challenge, -1);
  • }
  • }
  • rule("Sub: Introduce a Challenge")
  • rule("Player: Set Up the Match")
  • {
  • event
  • {
  • Subroutine;
  • IntroduceChallenge;
  • }
  • actions
  • {
  • "Probably done already, but repeat just in case."
  • Pause Match Time;
  • "Ensure players have spawned so they will be affected."
  • Wait Until(Has Spawned(All Players(All Teams)), 3);
  • "Hide usual HUD during the introduction."
  • Disable Hero HUD(All Players(All Teams));
  • Disable Game Mode HUD(All Players(All Teams));
  • "Remove any previous instructions."
  • Destroy HUD Text(Global.InstructionsID);
  • "Show instructions for the challenge in the top right corner."
  • If(Global.Challenge == 1);
  • Create HUD Text(All Players(All Teams), Custom String("Signature Challenge"), Custom String(
  • "- Primary Fire: no\r\n- Abilities: yes, more often\r\n- Quick Melee: Tracer, Winston\n- Ultimate: no"), Null, Right, 0, Color(
  • Green), Color(Green), Color(Green), Visible To and String, Visible Always);
  • Else If(Global.Challenge == 2);
  • Create HUD Text(All Players(All Teams), Custom String("Technical Challenge"), Custom String(
  • "- Hero: {0}\r\n- Primary Fire: no\r\n- Abilities: yes, more often\r\n- Quick Melee, Ultimate: no", Global.TechnicalHero),
  • Null, Right, 0, Color(Yellow), Color(Yellow), Color(Yellow), Visible To and String, Visible Always);
  • Else;
  • Create HUD Text(All Players(All Teams), Custom String("Showstopper Challenge"), Custom String(
  • "- Primary Fire: no\r\n- Abilities: yes, more often\r\n- Quick Melee: Tracer, Winston\r\n- Ultimate: yes, much faster"), Null,
  • Right, 0, Color(Red), Color(Red), Color(Red), Visible To and String, Visible Always);
  • End;
  • "Store the ID of the new instructions text for later removal."
  • Global.InstructionsID = Last Text ID;
  • "Look at the sky for a neutral view."
  • Start Camera(All Players(All Teams), Vector(0, 100, 0), Vector(0, 120, 0), 0);
  • "Wait for the cameras to sync up."
  • Wait(0.250, Ignore Condition);
  • "Make a sound to signal the start of the challenge."
  • Play Effect(All Players(All Teams), Buff Impact Sound, Color(White), Vector(0, 110, 0), 100);
  • "Show the challenge name above the reticle."
  • Big Message(All Players(All Teams), Global.Challenge == 1 ? Custom String("Signature Challenge") : (
  • Global.Challenge == 2 ? Custom String("Technical Challenge") : Custom String("Showstopper Challenge")));
  • "Wait for it to appear."
  • Wait(0.500, Ignore Condition);
  • "Show a brief objective description below the reticle."
  • Small Message(All Players(All Teams), Global.Challenge == 1 ? Custom String("No Primary Fire\r\nFocus on Your Abilities") : (
  • Global.Challenge == 2 ? Custom String("Everyone is {0}\r\nFocus on {0}'s Abilities", Global.TechnicalHero) : Custom String(
  • "Rapid Ultimate Charge\r\nFocus on Your Ultimate")));
  • "Wait the rest of the intro screen duration."
  • Wait(2.250, Ignore Condition);
  • "Return players to their regular cameras."
  • Stop Camera(All Players(All Teams));
  • "Show the usual HUD again."
  • Enable Hero HUD(All Players(All Teams));
  • Enable Game Mode HUD(All Players(All Teams));
  • "Fight!"
  • Unpause Match Time;
  • }
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • // Action count: 2
  • actions
  • {
  • Create HUD Text(Event Player, Null, Custom String("Kills in Challenge", Null, Null, Null), Player Variable(Event Player, KillsInChallenge), Left, 1, Color(White), Color(White), Color(White), Visible To And String, Default Visibility);
  • Create HUD Text(Event Player, Null, Custom String("Deaths in Challenge", Null, Null, Null), Player Variable(Event Player, DeathsInChallenge), Left, 2, Color(White), Color(White), Color(White), Visible To And String, Default Visibility);
  • }
  • }
  • rule("Sub: Spawn Dummy Bots (for testing only)")
  • rule("Sub: Clean Up from Soggy Bottom")
  • {
  • event
  • {
  • Subroutine;
  • SpawnDummies;
  • }
  • actions
  • {
  • "Turn this action off in testing to fill empty slots with dummy bots."
  • Abort;
  • "Destroy any bots from previous challenges."
  • Destroy All Dummy Bots;
  • "Wait for all previous bots to be destroyed."
  • Wait Until(Count Of(Filtered Array(All Players(All Teams), Is Dummy Bot(Current Array Element))) == 0, 3);
  • Global.LoopMax = 8 - Number Of Players(All Teams);
  • For Global Variable(LoopIter, 0, Global.LoopMax, 1);
  • Create Dummy Bot(Global.Challenge == 2 ? Global.TechnicalHero : Global.UnusedHeroes[Global.LoopIter], All Teams, -1, Spawn Points(
  • All Teams)[Global.LoopIter], Vector(0, 0, 0));
  • End;
  • }
  • event
  • {
  • Subroutine;
  • CleanUpSoggyBottom;
  • }
  • // Action count: 7
  • actions
  • {
  • If(Compare(Global Variable(CurrentSoggyBottom), !=, Null));
  • Destroy Effect(Player Variable(Global Variable(CurrentSoggyBottom), SoggyBottomEffect));
  • Set Player Variable(Global Variable(CurrentSoggyBottom), SoggyBottomEffect, Null);
  • Stop Forcing Player Outlines(All Players(Team(All)), Global Variable(CurrentSoggyBottom));
  • Clear Status(Global Variable(CurrentSoggyBottom), Unkillable);
  • Set Global Variable(CurrentSoggyBottom, Null);
  • End;
  • }
  • }
  • rule("Sub: Update the Soggy Bottom")
  • rule("Sub: Set Up a Challenge")
  • {
  • event
  • {
  • Subroutine;
  • UpdateSoggyBottom;
  • }
  • actions
  • {
  • "Find the maximum deaths in this challenge."
  • Global.Scratch1 = Last Of(Sorted Array(Mapped Array(All Players(All Teams), Current Array Element.DeathsInChallenge),
  • Current Array Element));
  • "Find all players with that number of deaths."
  • Global.Scratch2 = Filtered Array(All Players(All Teams), Current Array Element.DeathsInChallenge == Global.Scratch1);
  • "Find the player among those who has died most recently."
  • Global.Scratch1 = Last Of(Sorted Array(Global.Scratch2, Current Array Element.LastDeathTime));
  • "Choose no player at all if none have died yet."
  • If(Global.Scratch1.DeathsInChallenge == 0);
  • Global.Scratch1 = Null;
  • End;
  • "Take no action if the Soggy Bottom has not changed."
  • Abort If(Global.SoggyBottom == Global.Scratch1);
  • "Don't change the Soggy Bottom twice within 10 seconds."
  • Abort If(Total Time Elapsed < Global.LastSoggyBottomChange + 10);
  • "Record the time of the Soggy Bottom changing."
  • Global.LastSoggyBottomChange = Total Time Elapsed;
  • "Clean up from any previous Soggy Bottom."
  • Call Subroutine(CleanUpSoggyBottom);
  • "Set the new Soggy Bottom."
  • Global.SoggyBottom = Global.Scratch1;
  • "Give the new Soggy Bottom wallhacks."
  • Start Forcing Player Outlines(All Living Players(All Teams), Global.SoggyBottom, True, Color(Red), Always);
  • "Wait for the new Soggy Bottom to respawn."
  • Wait Until(Is Alive(Global.SoggyBottom), 15);
  • "Make the new Soggy Bottom immortal for 15 seconds."
  • Set Status(Global.SoggyBottom, Null, Unkillable, 15);
  • "Let the new Soggy Bottom know about their status."
  • Big Message(Global.SoggyBottom, Custom String("You are the Soggy Bottom"));
  • Small Message(Global.SoggyBottom, Custom String("Enjoy wallhacks and 15 seconds of immortality!"));
  • "Add a visual effect to reflect the immortality."
  • Create Effect(Is Alive(Global.SoggyBottom) ? All Players(All Teams) : Empty Array, Bad Aura, Color(Aqua), Global.SoggyBottom, 1,
  • Visible To Position and Radius);
  • "Store the ID of the effect for later removal."
  • Global.SoggyBottom.SoggyEffect = Last Created Entity;
  • }
  • event
  • {
  • Subroutine;
  • SetUpChallenge;
  • }
  • // Action count: 10
  • actions
  • {
  • Pause Match Time;
  • Set Match Time(Global Variable(ChallengeDuration));
  • Wait Until(Compare(Match Time, >, 1), 99999);
  • Set Global Variable At Index(_extendedGlobalCollection, 1, 0);
  • While(Compare(Value In Array(Global Variable(_extendedGlobalCollection), 1), <, Count Of(All Players(Team(All)))));
  • Set Player Variable(Value In Array(All Players(Team(All)), Value In Array(Global Variable(_extendedGlobalCollection), 1)), DeathsInChallenge, 0);
  • Set Player Variable(Value In Array(All Players(Team(All)), Value In Array(Global Variable(_extendedGlobalCollection), 1)), KillsInChallenge, 0);
  • Modify Global Variable At Index(_extendedGlobalCollection, 1, Add, 1);
  • End;
  • Call Subroutine(CleanUpSoggyBottom);
  • }
  • }
  • rule("Sub: Clean Up from Soggy Bottom")
  • rule("Sub: Spawn Dummy Bots (for testing only)")
  • {
  • event
  • {
  • Subroutine;
  • CleanUpSoggyBottom;
  • }
  • actions
  • {
  • "Turn off effects on any previous Soggy Bottom."
  • If(Global.SoggyBottom != Null);
  • Destroy Effect(Global.SoggyBottom.SoggyEffect);
  • Global.SoggyBottom.SoggyEffect = Null;
  • Stop Forcing Player Outlines(All Players(All Teams), Global.SoggyBottom);
  • Clear Status(Global.SoggyBottom, Unkillable);
  • Global.SoggyBottom = Null;
  • End;
  • }
  • event
  • {
  • Subroutine;
  • SpawnDummies;
  • }
  • // Action count: 9
  • actions
  • {
  • If(Not(Global Variable(DummyBots)));
  • Skip(7);
  • End;
  • Destroy All Dummy Bots;
  • Wait Until(Compare(Count Of(Filtered Array(All Players(Team(All)), Is Dummy Bot(Current Array Element))), ==, 0), 99999);
  • Set Global Variable(spawnCount, Subtract(8, Number Of Players(Team(All))));
  • For Global Variable(i, 0, Global Variable(spawnCount), 1);
  • Create Dummy Bot(If-Then-Else(Compare(Global Variable(Challenge), ==, 2), Global Variable(TechnicalHero), Value In Array(Global Variable(UnusedHeroes), Global Variable(i))), Team(All), -1, Value In Array(Spawn Points(Team(All)), Global Variable(i)), Vector(0, 0, 0));
  • End;
  • }
  • }
  • rule("Sub: Announce a Bingate")
  • rule("Sub: Introduce a Challenge")
  • {
  • event
  • {
  • Subroutine;
  • AnnounceBingate;
  • }
  • actions
  • {
  • "Wait a moment for the regular \"Eliminated X\" message to cycle through."
  • Wait(1, Ignore Condition);
  • "Add a bonus point to the player's score."
  • Modify Player Score(Global.BingateAttacker, 1);
  • "Let the player know."
  • Small Message(Global.BingateAttacker, Custom String("Bingate Kill of {0} {1}!\r\nBonus Point for Ultimate Shutdown",
  • Hero Icon String(Hero Of(Global.BingateVictim)), Global.BingateVictim));
  • "Show a cool effect to the player."
  • Play Effect(Global.BingateAttacker, Good Pickup Effect, Color(Purple), Eye Position(Global.BingateAttacker) + Facing Direction Of(
  • Global.BingateAttacker), 3);
  • }
  • event
  • {
  • Subroutine;
  • IntroduceChallenge;
  • }
  • // Action count: 24
  • actions
  • {
  • Pause Match Time;
  • Wait Until(Is True For All(All Players(Team(All)), Has Spawned(Current Array Element)), 3);
  • Disable Hero HUD(All Players(Team(All)));
  • Disable Game Mode HUD(All Players(Team(All)));
  • Destroy HUD Text(Global Variable(InstructionsID));
  • If(Compare(Global Variable(Challenge), ==, 1));
  • Create HUD Text(All Players(Team(All)), Custom String("Signature Challenge", Null, Null, Null), Custom String("- Primary Fire: no\n- Abilities: yes, more often\n- Quick Melee: Tracer, Winston\n- Ultimate: no", Null, Null, Null), Null, Right, 0, Color(Green), Color(Green), Color(Green), Visible To And String, Visible Always);
  • Else If(Compare(Global Variable(Challenge), ==, 2));
  • Create HUD Text(All Players(Team(All)), Custom String("Technical Challenge", Null, Null, Null), Custom String("- Hero: {0}\n- Primary Fire: no\n- Abilities: yes, more often\n- Quick Melee, Ultimate: no", Global Variable(TechnicalHero), Null, Null), Null, Right, 0, Color(Yellow), Color(Yellow), Color(Yellow), Visible To And String, Visible Always);
  • Else;
  • Create HUD Text(All Players(Team(All)), Custom String("Showstopper Challenge", Null, Null, Null), Custom String("- Primary Fire: no\n- Abilities: yes, more often\n- Quick Melee: Tracer, Winston\n- Ultimate: yes, much faster", Null, Null, Null), Null, Right, 0, Color(Red), Color(Red), Color(Red), Visible To And String, Visible Always);
  • End;
  • Set Global Variable(InstructionsID, Last Text ID);
  • Start Camera(All Players(Team(All)), Vector(0, 100, 0), Vector(0, 120, 0), 0);
  • Wait(0.25, Ignore Condition);
  • Play Effect(All Players(Team(All)), Buff Impact Sound, Color(White), Vector(0, 110, 0), 100);
  • Big Message(All Players(Team(All)), If-Then-Else(Compare(Global Variable(Challenge), ==, 1), Custom String("Signature Challenge", Null, Null, Null), If-Then-Else(Compare(Global Variable(Challenge), ==, 2), Custom String("Technical Challenge", Null, Null, Null), Custom String("Showstopper Challenge", Null, Null, Null))));
  • Wait(0.5, Ignore Condition);
  • Small Message(All Players(Team(All)), If-Then-Else(Compare(Global Variable(Challenge), ==, 1), Custom String("No Primary/Unscoped Fire\nFocus on Your Abilities", Null, Null, Null), If-Then-Else(Compare(Global Variable(Challenge), ==, 2), Custom String("Everyone is {0}\nFocus on {0}'s Abilities", Global Variable(TechnicalHero), Null, Null), Custom String("Rapid Ultimate Charge\nFocus on Your Ultimate", Null, Null, Null))));
  • Wait(2.25, Ignore Condition);
  • Stop Camera(All Players(Team(All)));
  • Enable Hero HUD(All Players(Team(All)));
  • Enable Game Mode HUD(All Players(Team(All)));
  • Unpause Match Time;
  • }
  • }
  • rule("Global: Set Up the Match")
  • rule("Global: Signature Challenge (1/3)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Global.Challenge == Null;
  • }
  • actions
  • {
  • "We'll decide when the match is complete."
  • Disable Built-In Game Mode Completion;
  • "Standard deathmatch announcements don't make sense here."
  • Disable Built-In Game Mode Announcer;
  • "Wait for the game proper to start."
  • Wait Until(Is Game In Progress, 99999);
  • "Ensure all players have spawned so their heroes will be available."
  • Wait Until(Has Spawned(All Players(All Teams)), 3);
  • "Do this early for use in spawning any dummy bots."
  • Call Subroutine(FindUnusedHeroes);
  • "Show Soggy Bottom information on the HUD when applicable."
  • Create HUD Text(Global.Challenge != 3 ? All Players(All Teams) : Empty Array, Custom String("Soggy Bottom"), Custom String(
  • "- Most deaths this challenge\r\n- Gets wallhacks\r\n- Immortal for 15 sec (aura)"),
  • Global.SoggyBottom != Null ? Custom String("{0} {1}", Hero Icon String(Hero Of(Global.SoggyBottom)), Global.SoggyBottom)
  • : Custom String("{0} (None Yet)", Icon String(No)), Right, 0.100, Color(Aqua), Color(Aqua), Color(Aqua), Visible To and String,
  • Visible Always);
  • "Show Bingate information on the HUD when applicable."
  • Create HUD Text(Global.Challenge == 3 ? All Players(All Teams) : Empty Array, Custom String("Bingate"), Custom String(
  • "- Ult shutdown by final blow\r\n- One bonus point for killer\r\nMost recent:"),
  • Global.BingateAttacker != Null ? Custom String("{0} {1} {2}", Global.BingateAttacker, Icon String(X), Global.BingateVictim)
  • : Custom String("{0} (None Yet)", Icon String(No)), Right, 0.100, Color(Purple), Color(Purple), Color(Purple),
  • Visible To and String, Visible Always);
  • "Pass control to the first challenge."
  • Global.Challenge = -1;
  • }
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global Variable(Challenge) == -1;
  • }
  • // Action count: 4
  • actions
  • {
  • Call Subroutine(SetUpChallenge);
  • Set Global Variable(Challenge, 1);
  • Call Subroutine(SpawnDummies);
  • Call Subroutine(IntroduceChallenge);
  • }
  • }
  • rule("Global: Signature Challenge (1/3)")
  • rule("Player: Signature Challenge (1/3)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Challenge == -1;
  • }
  • actions
  • {
  • Call Subroutine(SetUpChallenge);
  • Global.Challenge = 1;
  • Call Subroutine(SpawnDummies);
  • Call Subroutine(IntroduceChallenge);
  • }
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global Variable(Challenge) == 1;
  • Not(Is Dummy Bot(Event Player)) == True;
  • }
  • // Action count: 2
  • actions
  • {
  • Wait Until(Array Contains(All Heroes, Hero Of(Event Player)), Subtract(Global Variable(ChallengeDuration), 1));
  • Set Player Variable(Event Player, ChosenHero, Hero Of(Event Player));
  • }
  • }
  • rule("Global: Technical Challenge (2/3)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Challenge == 1;
  • Match Time <= 0.100;
  • }
  • actions
  • {
  • Call Subroutine(SetUpChallenge);
  • "Update the unused list for any new arrivals."
  • Call Subroutine(FindUnusedHeroes);
  • "Choose the hero for the Technical Challenge from the unused list."
  • Global.TechnicalHero = Random Value In Array(Global.UnusedHeroes);
  • Global.Challenge = 2;
  • Call Subroutine(SpawnDummies);
  • Call Subroutine(IntroduceChallenge);
  • }
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global Variable(Challenge) == 1;
  • Match Time <= 0.1;
  • }
  • // Action count: 6
  • actions
  • {
  • Call Subroutine(SetUpChallenge);
  • Call Subroutine(FindUnusedHeroes);
  • Set Global Variable(TechnicalHero, Random Value In Array(Global Variable(UnusedHeroes)));
  • Set Global Variable(Challenge, 2);
  • Call Subroutine(SpawnDummies);
  • Call Subroutine(IntroduceChallenge);
  • }
  • }
  • rule("Sub: Reset the Primary Fire Status")
  • {
  • event
  • {
  • Subroutine;
  • ResetPrimaryFire;
  • }
  • // Action count: 1
  • actions
  • {
  • Set Primary Fire Enabled(Global Variable(player), Array Contains(Array(Hero(Ana), Hero(Ashe), Hero(Mei), Hero(Roadhog), Hero(Torbjörn), Hero(Widowmaker)), Hero Of(Global Variable(player))));
  • }
  • }
  • rule("Global: Showstopper Challenge (3/3)")
  • rule("Player: Technical Challenge (2/3)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Challenge == 2;
  • Match Time <= 0.100;
  • }
  • actions
  • {
  • Call Subroutine(SetUpChallenge);
  • "It isn't the Showstopper Challenge without ults!"
  • Set Ultimate Ability Enabled(All Players(All Teams), True);
  • Global.Challenge = 3;
  • Call Subroutine(SpawnDummies);
  • Call Subroutine(IntroduceChallenge);
  • }
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global Variable(Challenge) == 2;
  • Not(Is Dummy Bot(Event Player)) == True;
  • }
  • // Action count: 8
  • actions
  • {
  • Start Forcing Player To Be Hero(Event Player, Global Variable(TechnicalHero));
  • Respawn(Event Player);
  • Wait Until(Has Spawned(Event Player), 3);
  • Wait(0.25, Ignore Condition);
  • Set Global Variable(player, Event Player);
  • Call Subroutine(ResetPrimaryFire);
  • Set Ultimate Charge(Event Player, 0);
  • Set Ultimate Ability Enabled(Event Player, False);
  • }
  • }
  • rule("Global: Finish the Match")
  • rule("Global: Showstopper Challenge (3/3)")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global.Challenge == 3;
  • Match Time <= 0.100;
  • }
  • actions
  • {
  • "This is a placeholder value for being finished."
  • Global.Challenge = -99;
  • "Bring back Athena to announce the outcome."
  • Enable Built-In Game Mode Announcer;
  • "Let nature take its course."
  • Enable Built-In Game Mode Completion;
  • }
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global Variable(Challenge) == 2;
  • Match Time <= 0.1;
  • }
  • // Action count: 4
  • actions
  • {
  • Call Subroutine(SetUpChallenge);
  • Set Global Variable(Challenge, 3);
  • Call Subroutine(SpawnDummies);
  • Call Subroutine(IntroduceChallenge);
  • }
  • }
  • rule("Player: Set Up the Match")
  • rule("Player: Showstopper Challenge (3/3)")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • actions
  • {
  • "Show kills in challenge on HUD."
  • Create HUD Text(Event Player, Null, Custom String("Kills in Challenge"), Event Player.KillsInChallenge, Left, 0, Color(White),
  • Color(White), Color(White), Visible To and String, Default Visibility);
  • "Show deaths in challenge on HUD."
  • Create HUD Text(Event Player, Null, Custom String("Deaths in Challenge"), Event Player.DeathsInChallenge, Left, 1, Color(White),
  • Color(White), Color(White), Visible To and String, Default Visibility);
  • }
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global Variable(Challenge) == 3;
  • Not(Is Dummy Bot(Event Player)) == True;
  • }
  • // Action count: 8
  • actions
  • {
  • Start Forcing Player To Be Hero(Event Player, Player Variable(Event Player, ChosenHero));
  • Respawn(Event Player);
  • Wait Until(Has Spawned(Event Player), 3);
  • Wait(0.25, Ignore Condition);
  • Set Global Variable(player, Event Player);
  • Call Subroutine(ResetPrimaryFire);
  • Set Ultimate Ability Enabled(Event Player, True);
  • Set Ultimate Charge(Event Player, 100);
  • }
  • }
  • rule("Player: Signature Challenge (1/3)")
  • rule("Global: Finish the Match")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.Challenge == 1;
  • Is Dummy Bot(Event Player) == False;
  • }
  • actions
  • {
  • "Ensure the player has spawned so their hero will be available."
  • Wait Until(Array Contains(All Heroes, Hero Of(Event Player)), 3);
  • "Record the player's hero so they can return to it after the Technical Challenge."
  • Event Player.ChosenHero = Hero Of(Event Player);
  • }
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Game In Progress == True;
  • Global Variable(Challenge) == 3;
  • Match Time <= 0.1;
  • }
  • // Action count: 3
  • actions
  • {
  • Set Global Variable(Challenge, -99);
  • Enable Built-In Game Mode Announcer;
  • Enable Built-In Game Mode Completion;
  • }
  • }
  • rule("Player: Technical Challenge (2/3)")
  • rule("Sub: Update the Soggy Bottom")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.Challenge == 2;
  • Is Dummy Bot(Event Player) == False;
  • }
  • actions
  • {
  • "Switch the player to the Technical Challenge hero."
  • Start Forcing Player To Be Hero(Event Player, Global.TechnicalHero);
  • "Respawn the player in a new location."
  • Respawn(Event Player);
  • "Ensure the player has respawned so they will be affected by further actions."
  • Wait Until(Has Spawned(Event Player), 3);
  • }
  • event
  • {
  • Subroutine;
  • UpdateSoggyBottom;
  • }
  • // Action count: 27
  • actions
  • {
  • If(Not(Global Variable(RecognizeSoggyBottom)));
  • Skip(25);
  • End;
  • Set Global Variable(maxDeaths, Last Of(Sorted Array(Mapped Array(All Players(Team(All)), Player Variable(Current Array Element, DeathsInChallenge)), Current Array Element)));
  • Set Global Variable(candidates, Filtered Array(All Players(Team(All)), Compare(Player Variable(Current Array Element, DeathsInChallenge), ==, Global Variable(maxDeaths))));
  • Set Global Variable(newSoggyBottom, Last Of(Sorted Array(Global Variable(candidates), Player Variable(Current Array Element, LastDeathTime))));
  • If(Compare(Player Variable(Global Variable(newSoggyBottom), DeathsInChallenge), ==, 0));
  • Set Global Variable(newSoggyBottom, Null);
  • End;
  • If(Compare(Global Variable(CurrentSoggyBottom), ==, Global Variable(newSoggyBottom)));
  • Skip(16);
  • End;
  • If(Compare(Total Time Elapsed, <, Add(Global Variable(LastSoggyBottomChange), 10)));
  • Skip(13);
  • End;
  • Set Global Variable(LastSoggyBottomChange, Total Time Elapsed);
  • Call Subroutine(CleanUpSoggyBottom);
  • Set Global Variable(CurrentSoggyBottom, Global Variable(newSoggyBottom));
  • Start Forcing Player Outlines(All Living Players(Team(All)), Global Variable(CurrentSoggyBottom), True, Color(Red), Always);
  • Wait Until(Is Alive(Global Variable(CurrentSoggyBottom)), Global Variable(SoggyBottomImmortalityDuration));
  • Big Message(Global Variable(CurrentSoggyBottom), Custom String("You are the Soggy Bottom", Null, Null, Null));
  • Small Message(Global Variable(CurrentSoggyBottom), Custom String("Enjoy wallhacks and {0} seconds of immortality!", Global Variable(SoggyBottomImmortalityDuration), Null, Null));
  • If(Compare(Global Variable(SoggyBottomImmortalityDuration), >, 0));
  • Set Status(Global Variable(CurrentSoggyBottom), Null, Unkillable, Global Variable(SoggyBottomImmortalityDuration));
  • Create Effect(If-Then-Else(Is Alive(Global Variable(CurrentSoggyBottom)), All Players(Team(All)), Empty Array), Bad Aura, Color(Aqua), Global Variable(CurrentSoggyBottom), 1, Visible To Position and Radius);
  • Set Player Variable(Global Variable(CurrentSoggyBottom), SoggyBottomEffect, Last Created Entity);
  • End;
  • }
  • }
  • rule("Player: Showstopper Challenge (3/3)")
  • rule("Player: Handle Death")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Global.Challenge == 3;
  • Is Dummy Bot(Event Player) == False;
  • }
  • actions
  • {
  • "Return the player to their originally chosen hero."
  • Start Forcing Player To Be Hero(Event Player, Event Player.ChosenHero);
  • "Respawn the player in a new location."
  • Respawn(Event Player);
  • "Ensure the player has respawned so they will be affected by further actions."
  • Wait Until(Has Spawned(Event Player), 3);
  • "Wait a little longer, else setting ultimate charge doesn't work."
  • Wait(0.250, Ignore Condition);
  • "Start the challenge with full ultimate charge."
  • Set Ultimate Charge(Event Player, 100);
  • }
  • event
  • {
  • Player died;
  • All;
  • All;
  • }
  • conditions
  • {
  • Or(Global Variable(RecognizeSelfDamage), Compare(Attacker, !=, Victim)) == True;
  • }
  • // Action count: 7
  • actions
  • {
  • Set Player Variable(Victim, LastDeathTime, Total Time Elapsed);
  • Set Player Variable(Victim, LastKiller, Attacker);
  • Modify Player Variable(Victim, DeathsInChallenge, Add, 1);
  • Modify Player Variable(Attacker, KillsInChallenge, Add, 1);
  • If(Compare(Global Variable(Challenge), !=, 3));
  • Call Subroutine(UpdateSoggyBottom);
  • End;
  • }
  • }
  • rule("Player: Handle End of Ultimate")
  • rule("Player: Clean Up Soggy Bottom Effect")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • "Detect end of ultimate."
  • Is Using Ultimate(Event Player) == False;
  • }
  • actions
  • {
  • "Recognize a Bingate during the Showstopper Challenge."
  • If(Global.Challenge == 3 && Event Player.LastDeathTime == Total Time Elapsed);
  • Global.BingateAttacker = Event Player.LastKiller;
  • Global.BingateVictim = Event Player;
  • Call Subroutine(AnnounceBingate);
  • End;
  • }
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Player Variable(Event Player, SoggyBottomEffect) != Null;
  • }
  • // Action count: 3
  • actions
  • {
  • Wait(Global Variable(SoggyBottomImmortalityDuration), Abort When False);
  • Destroy Effect(Player Variable(Event Player, SoggyBottomEffect));
  • Set Player Variable(Event Player, SoggyBottomEffect, Null);
  • }
  • }
  • rule("Player: Handle Death")
  • rule("Sub: Announce a Bingate")
  • {
  • event
  • {
  • Player Died;
  • All;
  • All;
  • }
  • conditions
  • {
  • "Ignore self damage."
  • Attacker != Victim;
  • }
  • actions
  • {
  • Victim.LastDeathTime = Total Time Elapsed;
  • Victim.LastKiller = Attacker;
  • Victim.DeathsInChallenge += 1;
  • Attacker.KillsInChallenge += 1;
  • "Update the Soggy Bottom for applicable challenges."
  • If(Global.Challenge != 3);
  • Call Subroutine(UpdateSoggyBottom);
  • End;
  • }
  • event
  • {
  • Subroutine;
  • AnnounceBingate;
  • }
  • // Action count: 7
  • actions
  • {
  • If(Not(Global Variable(RecognizeBingate)));
  • Skip(5);
  • End;
  • Wait(1, Ignore Condition);
  • Modify Player Score(Global Variable(BingateAttacker), Global Variable(BingateBonusPoints));
  • Small Message(Global Variable(BingateAttacker), Custom String("Bingate Kill of {0} {1}!\n{2} Bonus Point(s) for Ultimate Shutdown", Hero Icon String(Hero Of(Global Variable(BingateVictim))), Global Variable(BingateVictim), Global Variable(BingateBonusPoints)));
  • Play Effect(Global Variable(BingateAttacker), Good Pickup Effect, Color(Purple), Add(Eye Position(Global Variable(BingateAttacker)), Facing Direction Of(Global Variable(BingateAttacker))), 3);
  • }
  • }
  • rule("Player: Clean Up Soggy Bottom Effect")
  • rule("Player: Handle End of Ultimate")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • "Start when the effect is created elsewhere."
  • Event Player.SoggyEffect != Null;
  • }
  • actions
  • {
  • "Wait for immortality to lapse."
  • Wait(15, Abort When False);
  • Destroy Effect(Event Player.SoggyEffect);
  • Event Player.SoggyEffect = Null;
  • }
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Not(Is Using Ultimate(Event Player)) == True;
  • }
  • // Action count: 5
  • actions
  • {
  • If(And(And(Compare(Global Variable(Challenge), ==, 3), Global Variable(RecognizeBingate)), Compare(Player Variable(Event Player, LastDeathTime), ==, Total Time Elapsed)));
  • Set Global Variable(BingateAttacker, Player Variable(Event Player, LastKiller));
  • Set Global Variable(BingateVictim, Event Player);
  • Call Subroutine(AnnounceBingate);
  • End;
  • }
  • }
  • rule("Hero: Brigitte: Shield Bash deals more damage")
  • {
  • event
  • {
  • Player dealt damage;
  • All;
  • Brigitte;
  • }
  • conditions
  • {
  • Event Ability == Button(Primary Fire);
  • Is Firing Secondary(Event Player) == True;
  • }
  • // Action count: 1
  • actions
  • {
  • Damage(Victim, Attacker, Subtract(50, Event Damage));
  • }
  • }
  • rule("Hero: D.Va: Light Gun and Call Mech allowed while out of mech")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • D.va;
  • }
  • conditions
  • {
  • Is In Alternate Form(Event Player) == True;
  • }
  • // Action count: 2
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, True);
  • Set Ultimate Ability Enabled(Event Player, True);
  • }
  • }
  • rule("Hero: D.Va: Turn primary fire and ultimate back off when remeched")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • D.va;
  • }
  • conditions
  • {
  • Not(Is In Alternate Form(Event Player)) == True;
  • }
  • // Action count: 6
  • actions
  • {
  • Set Primary Fire Enabled(Event Player, False);
  • Wait(0.25, Abort When False);
  • If(Compare(Global Variable(Challenge), !=, 3));
  • Set Ultimate Charge(Event Player, 0);
  • Set Ultimate Ability Enabled(Event Player, False);
  • End;
  • }
  • }
  • rule("Hero: McCree: Deadeye deals regular damage")
  • {
  • event
  • {
  • Player dealt damage;
  • All;
  • Mccree;
  • }
  • conditions
  • {
  • Is Using Ultimate(Event Player) == True;
  • }
  • // Action count: 1
  • actions
  • {
  • Damage(Victim, Attacker, Divide(Multiply(Event Damage, 3), 7));
  • }
  • }
  • rule("Hero: Soldier: Helix Rockets don't deal self-damage")
  • {
  • event
  • {
  • Player took damage;
  • All;
  • Soldier: 76;
  • }
  • conditions
  • {
  • Attacker == Victim;
  • Event Ability == Button(Secondary Fire);
  • }
  • // Action count: 1
  • actions
  • {
  • Heal(Event Player, Null, Event Damage);
  • }
  • }
  • rule("Player: Deal Huge Self-Damage [key Interact+Crouch]")
  • {
  • event
  • {
  • Ongoing - Each Player;
  • All;
  • All;
  • }
  • conditions
  • {
  • Is Button Held(Event Player, Button(Interact)) == True;
  • Is Button Held(Event Player, Button(Crouch)) == True;
  • }
  • // Action count: 4
  • actions
  • {
  • If(Not(Global Variable(TestingCommands)));
  • Abort;
  • End;
  • Damage(Event Player, Event Player, 1000);
  • }
  • }
  • rule("Host: End a Challenge Early [key Interact+Reload]")
  • {
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Button Held(Host Player, Button(Interact)) == True;
  • Is Button Held(Host Player, Button(Reload)) == True;
  • }
  • actions
  • {
  • "Turn this on to prevent the host from ending a challenge early."
  • disabled Abort;
  • "Wind down the timer nearly to the end."
  • Set Match Time(0.500);
  • }
  • }
  • rule("Hero: Brigitte: Shield Bash Deals More Damage")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • Brigitte;
  • }
  • conditions
  • {
  • Event Ability == Button(Primary Fire);
  • Is Firing Secondary(Event Player) == True;
  • }
  • actions
  • {
  • Damage(Victim, Attacker, 50 - Event Damage);
  • }
  • }
  • rule("Hero: McCree: Deadeye Deals Regular Damage")
  • {
  • event
  • {
  • Player Dealt Damage;
  • All;
  • McCree;
  • }
  • conditions
  • {
  • Is Using Ultimate(Event Player) == True;
  • }
  • actions
  • {
  • Damage(Victim, Attacker, 0.300 * Event Damage);
  • }
  • }
  • rule("Hero: Soldier: Helix Rockets Don't Deal Self-Damage")
  • {
  • event
  • {
  • Player Took Damage;
  • All;
  • Soldier: 76;
  • }
  • conditions
  • {
  • "Only consider self damage."
  • Attacker == Victim;
  • "Only consider damage from Helix Rockets."
  • Event Ability == Button(Secondary Fire);
  • }
  • actions
  • {
  • "Heal back the same amount of damage."
  • Heal(Event Player, Null, Event Damage);
  • }
  • }
  • event
  • {
  • Ongoing - Global;
  • }
  • conditions
  • {
  • Is Button Held(Host Player, Button(Interact)) == True;
  • Is Button Held(Host Player, Button(Reload)) == True;
  • }
  • // Action count: 4
  • actions
  • {
  • If(Not(Global Variable(TestingCommands)));
  • Abort;
  • End;
  • Set Match Time(0.5);
  • }
  • }
Join the Workshop.codes Discord