Create
Abort Abort If Abort If Condition Is False Abort If Condition Is True Add Health Pool To Player Allow Button Apply Impulse Attach Players Big Message Break Call Subroutine Cancel Primary Action Chase Global Variable At Rate Chase Global Variable Over Time Chase Player Variable At Rate Chase Player Variable Over Time Clear Status Communicate Continue Create Beam Effect Create Dummy Bot Create Effect Create HUD Text Create Homing Projectile Create Icon Create In-World Text Create Progress Bar HUD Text Create Progress Bar In-World Text Create Projectile Create Projectile Effect Damage Declare Match Draw Declare Player Victory Declare Round Draw Declare Round Victory Declare Team Victory Destroy All Dummy Bots Destroy All Effects Destroy All HUD Text Destroy All Icons Destroy All In-World Text Destroy All Progress Bar HUD Text Destroy All Progress Bar In-World Text Destroy Dummy Bot Destroy Effect Destroy HUD Text Destroy Icon Destroy In-World Text Destroy Progress Bar HUD Text Destroy Progress Bar In-World Text Detach Players Disable Built-In Game Mode Announcer Disable Built-In Game Mode Completion Disable Built-In Game Mode Music Disable Built-In Game Mode Respawning Disable Built-In Game Mode Scoring Disable Death Spectate All Players Disable Death Spectate Target HUD Disable Game Mode HUD Disable Game Mode In-World UI Disable Hero HUD Disable Inspector Recording Disable Kill Feed Disable Messages Disable Movement Collision With Environment Disable Movement Collision With Players Disable Nameplates Disable Scoreboard Disable Text Chat Disable Voice Chat Disallow Button Else Else If Enable Built-In Game Mode Announcer Enable Built-In Game Mode Completion Enable Built-In Game Mode Music Enable Built-In Game Mode Respawning Enable Built-In Game Mode Scoring Enable Death Spectate All Players Enable Death Spectate Target HUD Enable Game Mode HUD Enable Game Mode In-World UI Enable Hero HUD Enable Inspector Recording Enable Kill Feed Enable Messages Enable Movement Collision With Environment Enable Movement Collision With Players Enable Nameplates Enable Scoreboard Enable Text Chat Enable Voice Chat End For Global Variable For Player Variable Go To Assemble Heroes Heal If Kill Log To Inspector Loop Loop If Loop If Condition Is False Loop If Condition Is True Modify Global Variable Modify Global Variable At Index Modify Player Score Modify Player Variable Modify Player Variable At Index Modify Team Score Move Player To Team Pause Match Time Play Effect Preload Hero Press Button Remove All Health Pools From Player Remove Health Pool From Player Remove Player Reset Player Hero Availability Respawn Restart Match Resurrect Return To Lobby Set Ability 1 Enabled Set Ability 2 Enabled Set Ability Charge Set Ability Cooldown Set Ability Resource Set Aim Speed Set Ammo Set Crouch Enabled Set Damage Dealt Set Damage Received Set Environment Credit Player Set Facing Set Global Variable Set Global Variable At Index Set Gravity Set Healing Dealt Set Healing Received Set Invisible Set Jump Enabled Set Jump Vertical Speed Set Knockback Dealt Set Knockback Received Set Match Time Set Max Ammo Set Max Health Set Melee Enabled Set Move Speed Set Objective Description Set Player Allowed Heroes Set Player Health Set Player Score Set Player Variable Set Player Variable At Index Set Primary Fire Enabled Set Projectile Gravity Set Projectile Speed Set Reload Enabled Set Respawn Max Time Set Secondary Fire Enabled Set Slow Motion Set Status Set Team Score Set Ultimate Ability Enabled Set Ultimate Charge Set Weapon Skip Skip If Small Message Start Accelerating Start Assist Start Camera Start Damage Modification Start Damage Over Time Start Facing Start Forcing Dummy Bot Name Start Forcing Player Outlines Start Forcing Player Position Start Forcing Player To Be Hero Start Forcing Spawn Room Start Forcing Throttle Start Game Mode Start Heal Over Time Start Healing Modification Start Holding Button Start Modifying Hero Voice Lines Start Rule Start Scaling Barriers Start Scaling Player Start Throttle In Direction Start Transforming Throttle Stop Accelerating Stop All Assists Stop All Damage Modifications Stop All Damage Over Time Stop All Heal Over Time Stop All Healing Modifications Stop Assist Stop Camera Stop Chasing Global Variable Stop Chasing Player Variable Stop Damage Modification Stop Damage Over Time Stop Facing Stop Forcing Dummy Bot Name Stop Forcing Player Outlines Stop Forcing Player Position Stop Forcing Player To Be Hero Stop Forcing Spawn Room Stop Forcing Throttle Stop Heal Over Time Stop Healing Modification Stop Holding Button Stop Modifying Hero Voice Lines Stop Scaling Barriers Stop Scaling Player Stop Throttle In Direction Stop Transforming Throttle Teleport Unpause Match Time Wait Wait Until While
Ability Charge Ability Cooldown Ability Icon String Ability Resource Absolute Value Add All Damage Heroes All Dead Players All Heroes All Living Players All Players All Players Not On Objective All Players On Objective All Support Heroes All Tank Heroes Allowed Heroes Altitude Of Ammo And Angle Between Vectors Angle Difference Append To Array Arccosine In Degrees Arccosine In Radians Arcsine In Degrees Arcsine In Radians Arctangent In Degrees Arctangent In Radians Array Array Contains Array Slice Assist Count Attacker Backward Button Char In String Closest Player To Color Compare Control Mode Scoring Percentage Control Mode Scoring Team Cosine From Degrees Cosine From Radians Count Of Cross Product Current Array Element Current Array Index Current Game Mode Current Map Custom Color Custom String Damage Modification Count Damage Over Time Count Direction From Angles Direction Towards Distance Between Divide Dot Product Down Empty Array Entity Count Entity Exists Evaluate Once Event Ability Event Damage Event Direction Event Healing Event Player Event Was Critical Hit Event Was Environment Event Was Health Pack Eye Position Facing Direction Of False Farthest Player From Filtered Array First Of Flag Position Forward Game Mode Global Global Variable Has Spawned Has Status Heal Over Time Count Healee Healer Healing Modification Count Health Health of Type Hero Hero Being Duplicated Hero Icon String Hero Of Horizontal Angle From Direction Horizontal Angle Towards Horizontal Facing Angle Of Horizontal Speed Of Host Player Icon String If-Then-Else Index Of Array Value Index Of String Char Input Binding String Is Alive Is Assembling Heroes Is Between Rounds Is Button Held Is CTF Mode In Sudden Death Is Communicating Is Communicating Any Is Communicating Any Emote Is Communicating Any Spray Is Communicating Any Voice line Is Control Mode Point Locked Is Crouching Is Dead Is Dummy Bot Is Duplicating Is Firing Primary Is Firing Secondary Is Flag At Base Is Flag Being Carried Is Game In Progress Is Hero Being Played Is In Air Is In Alternate Form Is In Line of Sight Is In Setup Is In Spawn Room Is In View Angle Is Jumping Is Match Complete Is Meleeing Is Moving Is Objective Complete Is On Ground Is On Objective Is On Wall Is Portrait On Fire Is Reloading Is Standing Is Team On Defense Is Team On Offense Is True For All Is True For Any Is Using Ability 1 Is Using Ability 2 Is Using Ultimate Is Waiting For Players Last Assist ID Last Created Entity Last Created Health Pool Last Damage Modification ID Last Damage Over Time ID Last Heal Over Time ID Last Healing Modification ID Last Of Last Text ID Left Local Player Local Vector Of Magnitude Of Map Mapped Array Match Round Match Time Max Max Ammo Max Health Max Health of Type Min Modulo Multiply Nearest Walkable Position Normalize Normalized Health Not Null Number of Dead Players Number of Deaths Number of Eliminations Number of Final Blows Number of Heroes Number of Living Players Number of Players Number of Players On Objective Number of Slots Objective Index Objective Position Opposite Team Of Or Payload Position Payload Progress Percentage Player Carrying Flag Player Closest To Reticle Player Hero Stat Player Stat Player Variable Players In Slot Players On Hero Players Within Radius Players in View Angle Point Capture Percentage Position Of Raise To Power Random Integer Random Real Random Value In Array Randomized Array Ray Cast Hit Normal Ray Cast Hit Player Ray Cast Hit Position Remove From Array Right Round To Integer Score Of Server Load Server Load Average Server Load Peak Sine From Degrees Sine From Radians Slot Of Sorted Array Spawn Points Speed Of Speed Of In Direction Square Root String String Contains String Length String Replace String Slice String Split Subtract Tangent From Degrees Tangent From Radians Team Of Team Score Text Count Throttle Of Total Time Elapsed True Ultimate Charge Percent Up Update Every Frame Value In Array Vector Vector Towards Velocity Of Vertical Angle From Direction Vertical Angle Towards Vertical Facing Angle Of Vertical Speed Of Victim Weapon Workshop Setting Combo Workshop Setting Hero Workshop Setting Integer Workshop Setting Real Workshop Setting Toggle World Vector Of X Component Of Y Component Of Z Component Of

Workshop Basics Last updated April 11, 2023

Contents

Overview

This is a basic guide on how to use the Overwatch Workshop and a run-down on how it works. This is intended for newcomers to the Overwatch Workshop who may not have programming experience. It doesn't go over eveything, but it explains the fundamentals of the Workshop and how it works.

Accessing the Workshop

The Overwatch Workshop is a way to give custom games custom rules and behaviours. To create a Workshop mode, you need to create a custom game lobby where you can build your workshop mode.

To make a custom game lobby, click on the Custom Games card.
Custom game browser card
Click on the Create button to make a new lobby.
Create lobby button
Here, you can manage the game lobby and open the settings.

To open the Workshop for this mode, open the lobby settings.
Lobby settings button
Click on Workshop.

The Workshop should start empty, like this, unless you loaded a preset with Workshop rules.

How the Workshop works

Workshop modes are made up of rules. Rules have an event, some conditions and some actions. When a rule's event happens and all of the conditions for the rule are met, then the actions will be run from top to bottom.

Events

All rules have events. When the event happens, the rule will "try to happen". That is, it will check all the conditions. If they are all met, then the rule will do all of the actions in top down order. A list of all events can be found here.

Conditions

Conditions compare two values. If the comparison is correct, then the condition is met. For example, the condition Custom String("Hello") == Custom String("hello") is wrong, so it is not met. Custom Strings are just text values, and since the two text values are different (comparison is case sensitive), the condition is not met. The condition that (2 + 1) > 2 is correct, so it would be met.

Another example: this condition is met when the player is moving, so rules that have this condition cannot run the actions if the player is not moving.

A rule needs all of its conditions to be met for its actions to be run. You can check the Compare value wiki page to find which comparisons mean what.

Actions

An action does something in the game. They can do things like changing a player's move speed, creating things like effects, texts or bots, waiting, skipping another action or looping another set of actions, and many other things.

Most actions need some values to be provided. For example, setting the match time needs you to tell it what to set the match time to; it needs a number. This wiki has a comprehensive and usually up-to-date list of actions, what they do and what values they need as well as their types. There are also some deeper guides on this wiki that clarify how to use actions or show unique and interesting ways to use them.

Values

Values are information about the game or just information in general that are used by conditions and actions. Some examples are:

  • the number 25
  • the payload's progress in the game
  • a player, such as the host player
  • text values (a string or custom string)
  • a list of other values (an array)

Or many other examples.

Values have different types. You should pay attention to types to make sure your code makes sense. For example, it doesn't make sense to set the match time to "Hello" seconds, it doesn't make sense to kill the number 200, nor to check if a position is greater than a number. You should try to make sure the types of the values you use make sense where you use them.

You can check the wiki page for values to find info on specific values and their types.

Contextual values

This is an example rule that will try to happen whenever any player dies. If the player is using their ultimate when they die, a small message will be displayed, then, after 1 second, they will be removed from the game.
Example player died rule
In that example, Event Player refers to the player who died to trigger the event. This value is special, because it depends on the context of the rule. It refers to two different players when two different players die.

For example, if player xX_T500_Pro_Genji_Xx dies while using their ult, then in that instance of the rule, Event Player refers to xX_T500_Pro_Genji_Xx. In that instance of the rule, the conditions are checked, the rule sees that the Event Player, which is xX_T500_Pro_Genji_Xx in this instance is using their ult. This means the actions are run; a small message is displayed, one second passes and then xX_T500_Pro_Genji_Xx is kicked from the game.

If another player, superteamfortress dies but isn't using their ult, the rule will try to run, in a different instance with its Event Player being superteamfortress. It will then see that its Event Player (superteamfortress) is not using their ult and it will not run its actions.

There are more examples; in a Player Received Healing event, Healer and Healee refer to the player who healed and a player who got healed, in that order. In a Player Died event, there are Attacker and Victim which refer to the player who killed the victim, and the player who got killed by the attacker, respectively.

You can check the wiki page for the event for the contextual values based on that event.

There is 1 value that acts like a contextual value but doesn't depend on events. It is called Local Player. It can only be used in created effects and visuals since it refers to the player that is looking at the effect. A page for Local Player can be found on this wiki.

Making a basic mode

idk lol go search on tick-tock or something

Saving Workshop modes

There are three ways to save Workshop modes for later. These are saving it to a preset which can be loaded, exporting it to a code which can be imported or copying the whole mode's text and saving it on your computer as a text file or on this website.

Saving to a preset

Saving the mode to a preset is the least advisable of the three, but is convenient and easy.

Press the Save Preset button here, and enter the name for the preset.
Save to preset button
Saving to a preset can be a bad idea since it is easy to overwrite presets containing your gamemode, at which point that mode is permanently lost if you did not save it elsewhere. Also, the amount of presets is limited, so if you have a lot of gamemodes, you will have to start overwriting old ones.

Saving to a code

A code is a 5-6 letter code that can be used to import a mode. Saving the mode to a code requires that you keep a copy of that gamemode code somewhere, so you can import it later.

Press the Share Code button to create a new code or update an existing one. To generate a new code, change the dropdown in the popup to CREATE A NEW CODE. To update an existing code with your current lobby's settings, change it to UPLOAD TO EXISTING CODE and enter the code.
Share code button

To load a code, press the Import Code button. Enter the code to import it.

Uploading to the existing code overwrites the contents in that code to your current lobby's settings, permanently erasing what was once on the code. To prevent accidentally overwriting your other modes, it is advisable to put the code in the mode's description or name. Then, to update the mode, simply copy the code in the description and upload to that code.

You will need to keep a list outside of Overwatch of the codes that contain your saved modes, since there is no way to get the list of codes that you have ownership of from Overwatch. Codes expire, deleting the mode associated with the code, unless it is imported or uploaded to enough times, making it immortal. This is usually not a problem if you use the code enough in 6 months, but this is not a bulletproof solution to saving your modes either. However, it is relatively easy and convenient and lets you share your mode with others easily.

Codes can be shared on this website, by creating a code, then making a post with that code. The text form can be saved in that post alongside the code, in the code snippet section of the post.

Saving to text

Copying the mode's settings will copy all of the mode's settings, including the Workshop settings and rules. You can then paste this to a text file to save it and copy the contents of the file to your clipboard to paste it into a lobby to load the mode.

Press the Copy Settings button to copy all of the mode's settings to your clipboard. Paste this into Notepad or your text editor of choice to save it as a text file.
Copy settings button

After copying a mode's settings, the Import Settings button appears. Clicking it enters the settings on your clipboard to the lobby.
Import settings button

Since console players cannot paste the settings to a file or upload them to this website, they cannot use this method to permanently save modes. PC players can do so, meaning this is the best way to save modes for them. If you don't want to save and organize files, you can upload the settings on this website, along with the share code for the mode. You can also make posts that are unlisted or private if you don't want to share them.

You can also paste and copy rules, conditions and actions as text. This can be useful for editing the order of arguments, or copying values from one place to another, which can't be done easily in the Workshop editor.

This is how HLLs - high level languages can create modes without you having to open the Workshop editor. The mode is created through text instead of through Overwatch, then converted to the text form to be pasted into a lobby.

Limitations of the Workshop

The two biggest limitations of the Workshop are features and server load. Since players can only use actions, values and events provided to them, Workshop modes are limited to only the features provided by the Overwatch developers. This can make some things that seem simple incredibly difficult to do in the Workshop, such as tracking where Junkrat's Riptire is, or making a character shoot faster. These are subject to change if such features are added to the Workshop in the future.

The second major limitation of the Workshop is the server load limitation. When a lobby is using too many server resources, it will stop the game in the lobby. This is to make sure custom games don't overwhelm Overwatch's servers. The problem is that this limits the complexity of Overwatch modes, making some ideas for modes infeasible.

Other limitations are also in place to keep clients or servers from getting overwhelmed, such as the extension system and the maximum amount of players, bots, texts and effects. These are the maximums:

  • The maximum amount of players and bots combined is 12, which can be raised to 24 using an extension. However, there cannot be more than 12 real players. This does not include training bots but does include AI bots.
  • The maximum number of texts is 128. This cannot be increased. Texts include in-world texts and HUD texts and their progress bar counterparts.
  • The maximum number of effects is 128. This can be increased to 256 with an extension. Effects include effects, beam effects, icons and Workshop created projectiles.
Join the Workshop.codes Discord