Return to post
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);
}
}