Dota 2 announcers work as a database of responses to specific events: "your top tower has fallen", "opposing team bottom barracks fallen", "courier slain", and so on. Custom announcers can be created by recording lines for each of these events, and replacing the default announcer's voice. Currently, the easiest way to prepare a script for a new announcer for submission is to work from the provided Instructional Script Template below, which lists all of the lines required of each announcer pack, several optional opportunities to allow your pack to stand out, and a list of guidelines to help your announcer pack be as successful as possible. Once you have recorded your script, you may use the Sample Spreadsheets below to construct an approximation of the event triggers intended for each line. The Sample Spreadsheets show example triggers for the events detailed in the Instructional Script Template, though for a more thorough list of triggers you may wish to refer to the Event Triggers list. We have also provided a lightly annotated version of the governing spreadsheets used with the released Bastion announcer pack for additional study and inspiration.
Resources:
Instructional Script Template - Updated 07/16/2013
Event Triggers List - Updated 07/18/2013
Sample Announcer Spreadsheet - Updated 07/18/2013
Sample Killing Spree Announcer Spreadsheet - Updated 07/18/2013
Bastion Announcer Spreadsheet - Updated 07/18/2013
Bastion Killing Spree Announcer Spreadsheet - Updated 07/18/2013
Intensity, Personality, Brevity, and above all, Variety, are the keys to creating a successful announcer.
Every line you record will be heard many times by every player that activates the event. In one game, a player might hear fifteen "tower has fallen" events, three "Roshan has fallen" events, and over thirty "your [building] is under attack" events. For an announcer to remain fresh after many games, each event should have a wide variety of available lines. The Juggernaut announcer has about three variations on every line, while the Dr. Kleiner announcer has as many as five in some categories. You may also wish to use the follow-up mechanism as a way to create variety by allowing the announcer to mix and match a base event ("your top tower has fallen") with a different set of relevant follow-up lines ("that doesn't look good for you"). The Bastion and Axe announcers make extensive use of the follow-up features. Please also bear in mind that we have a limit of 600 lines for workshop announcers.
Go big with your performance! To stand out, your announcer must be able to make a solid impression on the listener with just a handful of words. Bringing lots of intensity and personality to each line of dialog will help make your character unique. It is also required that you record at least one "straight" version of each main event in your character's voice. For example, if your Renaissance Faire Announcer has a line such as "Behold! Thine top tower doth find itself beseiged!", you must also record a basic "Your top tower is under attack!" in the same voice. This will help keep your over-the-top lines from becoming repetitive, since they can be mixed in with the straightforward lines at a lower frequency.
Keep it clean and keep it positive! Dota 2 has a very wide audience and we want to make sure that each announcer is able to appeal to as many people as possible. When writing the script for your announcer please aim to keep your humor relatively clean, avoiding dialog that is sexist, or racist, or religiously offensive. Additionally, Dota 2 can often be a very stressful game. When a player’s team begins to lose oftentimes the last thing they will want to hear is an announcer insulting and berating their play. Where appropriate, attempt to keep your announcer commentary positive, or funny, or at the very least encouraging. We also advise against referencing copyrighted works such as songs or films, or making remarks about real people.
Remember that Dota 2 can be a chaotic game and things may happen very quickly. Aim to keep your announcer's lines short, since the interval between a tower falling and a hero speaking may only be a few seconds, or less. Long lines can be distracting to players, who are trying to focus on keeping their hero alive. Longer lines also become repetitive more quickly, and have a high chance of being cut off by another announcer line being triggered. Generally, the rule of thumb is to keep your lines below three seconds, and absolutely no longer than five seconds.
Spectator-only lines, which are heard only when users have your announcer equipped while watching a game, may have more leeway in length and content since spectators are not focused on cutting through noise to hear game-critical information in the same way that players are. You may mark any line as being spectator-specific, so that spectators and players can hear entirely different dialogue for the same events. In the sample spreadsheet, players hear "your tower is under attack", whereas spectators hear "radiant's tower is under attack" for the same event.
The Announcer Template Instructions has more information and guidance.
Creating professional-quality material for evaluation should be among your highest priorities. Proper recording hardware and facilities, good microphone technique and spacing, and correctly managed audio levels can dramatically impact how well your announcer pack is ultimately received.
Using a headset microphone to record an announcer pack for submission will not be acceptable.
We strongly recommend that you hire a studio, or find an audio hobbyist with a project studio. A professional engineer or audio hobbyist who is able to navigate the intricacies of recording voice will provide us with the best quality material.
You should record your original audio in mono using a full resolution format (such as WAV or AIF) with a minimum of 16 bit depth and 44.1khz sample rate. Once your announcer has been recorded and you begin editing your material, listen closely for any harsh plosives or distorted peaks that may have been missed-you may need to re-record those takes, or remove them entirely. Please leave a quarter-second of ambient audio from the initial recording on both ends of each clip for engineering purposes.
If your submission is accepted, we will contact you for the original high-res files. However, to reduce the size of your initial workshop submission and make it generally easier to move around and work with, you may wish to compress your audio into .MP3 format using a program such as SoundForge, or iTunes before uploading.
Package and submit your compressed audio and your event trigger spreadsheet to us as a workshop item through the game client.
After recording and rendering your files, you should fill out a spreadsheet to create an approximation of which files go with which events. For instance, the following example indicates that you would like to play "announcer_battle_begin_02 " after the "game start" horn honks.
A | B | C | D |
announcer_battle_begin_02 | The battle begins! | Custom | IsGameStart |
NOTE: with a handful of exceptions (follow-ups, respawn, and purchase), all lines triggered by an announcer have "Custom" in their C column.
You may specify several lines for the same event, such as this example from the Dr. Kleiner announcer:
announcer_fort_rad_01 | I've never seen Radiant's structures looking so fortified. | Custom | GlyphUsedGood |
announcer_fort_rad_02 | Radiant's structures are beautifully fortified. | Custom | GlyphUsedGood |
announcer_fort_rad_03 | Radiant's structures are fortified. | Custom | GlyphUsedGood |
announcer_fort_rad_04 | Radiant's structures are fortified. There appears to be some sort of magic at work. | Custom | GlyphUsedGood |
In the above case the game will pick one line from between announcer_fort_rad_01, announcer_fort_rad_02, announcer_fort_rad_03, or announcer_fort_rad_04 to play when the Radiant ("good") team uses the glyph of fortification. Wherever multiple rows have identical criteria, they are considered to be alternative lines for the same event.
In some cases the D column of the spreadsheet has multiple criteria. These criteria together define the event that the line responds to; the line will play only if all of them are true. Additionally, when partial matches occur, the system will choose whichever line matches the highest total number of criteria. In the example below, announcer_rax_fall_yr_top plays when all of the following are true: a tower has been killed, it was in the top lane, and the "kill" was not the result of a team denying that tower.
announcer_twr_fall_yr_top | Your top tower has fallen. | Custom | IsTowerKilled IsTopLane IsNotDeny |
Certain optional criteria can be added to a D column to further specify when you want a line to play. For example, you can use IsSpectator to define a line that plays only for spectators and not for players.
announcer_rax_attack_dire_bot | Dire's bottom barracks are under attack. | Custom | IsBarracksAttacked IsBadAttacked IsSpectator IsBotLane |
Certain event types are "follow-up" lines that optionally play after other event lines have played.
announcer_followup_generic_01 | Bet that hurt! | Followup_Generic | (nothing in column D) |
Note that the follow-up type is indicated in the C column. Follow-ups may be built as generic event to occur after any kind of event, or for specific events. Since there is nothing in the D column of this follow-up, it will be added to the pool of lines for any case where a generic follow-up line is called for. This way you can mix and match lines for even more variety, such as: "The Radiant's Courier has been killed... That poor, defenseless courier!" by recording and defining the "courier killed" and follow-up parts separately.
announcer_courier_rad_dead_01 | Radiant’s Courier has been killed. | Custom | CourierLostGood |
announcer_courier_dire_dead_01 | Dire’s Courier has been killed. | Custom | CourierLostBad |
announcer_courier_followup_01 | That poor, defenseless courier! | Followup_Generic | CourierLostGood Chance_25% |
announcer_courier_followup_01 | That poor, defenseless courier! | Followup_Generic | CourierLostBad Chance_25% |
Notice that the follow-up line event is generic, yet also contains the same event criteria as the prior line, indicating that it is intended to be specific to that event. This means the line event will be placed in the generic pool with the other follow-ups in the announcer pack, however this specific clip will only play when the Radiant courier is killed.
Additionally, the above follow-up example has a Chance_25% criteria. Each time any line plays, a random number between 1 and 100 is chosen. The Chance criteria is met if the number rolled is equal to or below the indicated percentage chance. Since our voice system will always play whichever line matches the highest number of criteria, the ultimate result of the above example is that if a courier is killed, and the random number rolled is 25 or below, announcer_courier_followup_01 will always play. Combining specific events with Chance criteria is one way to allow you to mix generic follow-ups in with event-specific follow-ups.
Also notice that the same announcer_courier_followup_01 line is built as a follow-up for both CourierLostGood ("Radiant"), and CourierLostBad ("Dire") events. A single line may be used for as many specific events as you wish. If you wish to assign a line to several mutually exclusive events, each of those events triggers will need to be built separately.
Finally, timing modifiers and the links that guide event lines into a follow-up line appear in the E column. To expand on the examples from above:
A | B | C | D | E |
announcer_courier_rad_dead_01 | Radiant’s Courier has been killed. | Custom | CourierLostGood | respeakdelay 35 then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 9 |
announcer_courier_followup_01 | That poor, defenseless courier! | Followup_Generic | CourierLostGood Chance_25% | speakonce |
In these expanded examples there are three types of modifiers shown in the E column:
respeakdelay 35 | This indicates that once this specific line has played, it cannot play again for set period of time, in this case 35 seconds. |
speakonce | This indicates that once the line has played, it will not play again for the rest of the match. |
then self TLK_DOTA_FOLLOWUP_GENERIC foo:0 9 | This is one operation. It indicates the type of follow-up to move on to next (in this case "TLK_DOTA_FOLLOWUP_GENERIC"), with the number at the end indicating how many seconds to wait before playing the follow-up, in this case 9 seconds. |
Each type of event has a natural repeat delay unique to that event in order to prevent the listener from being overwhelmed with repeated information, so it is not necessary to include a timing modifier with most lines.
Other follow-up concepts include TLK_DOTA_FOLLOWUP_POSITIVE (intended to follow events that have ended well for the listener), TLK_DOTA_FOLLOWUP_NEGATIVE (intended to follow events that have ended poorly for the listener), and TLK_DOTA_FOLLOWUP_NEGATIVE_ONGOING (intended to follow lines indicating an event that is in progress, and that the listener should be concerned or warned about, i.e. "Storm clouds gather").
When you are ready to construct your announcer events, please see the Event Triggers List, Sample Announcer Spreadsheet, Sample Killing Spree Announcer Spreadsheet for more information and examples. You may also wish to study the Bastion Announcer Spreadsheet and Bastion Killing Spree Announcer Spreadsheet for further examples of how Announcer lines and triggers may be used and combined.