• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

[Lua] Warcraft 3 Re-Reforged Codex System



CODEX SYSTEM

Description

Code

Tutorial

Known Issues


From the early days of Warcraft 3 Re-Reforged, it was clear that adding side content about the immense game lore was one of the tasks I had to face. My first implementation were the so called lore-tips, small sentences shown in-game when certain events were triggered. While nice and definitely better than nothing, the lore-tips had a fair share of issues, above all the clutter they caused on the screen and the relative short duration and length, making it hard for players to read while also preventing players from diving deep into the lore, when and how much they saw fit.

When I released Warcraft 3 Re-Reforged: Exodus of the Horde and I received a massive amount of support, I went back to the drawing room to invent something better. This something is the codex system, which is what I am sharing here. This system is designed to mimic the codex we can see in other games, for example the Mass Effect Trilogy, with a significative difference: it's mission based.


codex_discovered.png
codex_undiscovered.png


Indeed, to make something that sticks through missions would be a considerable effort in the Warcraft 3 engine, and to make it mission based allowed me to design it more like a small collectible minigame. With some great suggestions received by many of my contributors (above all, Knall). Basically, this codex system works as follows:
  • It has a main custom dialog seamless integrated into the game menu system compatible with localizations.
  • The button to open the main custom dialog replaces the allies button and pauses the game when clicked, like all other menus.
  • It contains up to six undiscovered entries at the beginning of each mission, all shown from the start in the main custom dialog.
  • Each entry is represented by a clickable button, showing a generic undiscovered entry text if the entry is yet undiscovered.
  • Heroes can pick up little scrolls, or other kind of items, on the map to discover entries.
  • The scrolls are items with appropriate names and descriptions, a sound is played and a floating text displayed when they are picked.
  • Once a certain scroll is picked, an entry is discovered and the relative button changes its text to display the title of that entry.
  • When the button is clicked and the relative entry is discovered, a scrollable text area appears, showing all the relative information about the lore for that entry.
  • All the buttons are selectable through keyboard and support default shortcuts.
  • It's not compatible with multiplayer.

menu.png


By hiding the scrolls in appropriate positions or within certain destructibles and units, it's possible to design a treasure hunt minigame, something a lot of gamers enjoy and I think a perfect way to make the lore of a certain map seamless with the gameplay, being as interactive as possible. I would really love to see the custom worlds with deep lore made by the community brought to life with this codex system, or a variation of it. Hopefully, the associated tutorial will be enough to get an headstart into using it and even customizing it for your own needs.


codex_entry.png
codex_entry_discovered.png


The codex system has a core Lua (or JASS) set of custom functions, with the addition of both GUI triggers, specific items, .fdf and .toc files. This version here is set to Lua, but the tutorial is valid for both. Here you can find a JASS version of the system.
To import this codex system into your map it's necessary to do the following:
  1. Make sure your map is set to Lua.
  2. Import all the .fdf and .toc files attached to this system (as .zip file) at the appropriate path with the appropriate localization. The amount of localizations required varies with your needs. Please refer to the attached sample map to see how the paths are setup for each localized asset.
  3. Create a custom script block in the trigger editor and copy paste the main set of custom functions you can find on the second page of this system.
  4. Add a set of items, at most six, representing the entries to pick up. You can copy paste into your map the values in the object editor of the items provided in the sample map. Remember to also import the scroll model or use another model, otherwise the items will be invisible.
  5. Add six sounds variables into your Sound Editor. Usually, I sue the AchievementEarned sound you can find under the interface category. For additional information about the import, please refer to the attached sample map.
  6. Copy paste all the variables from the attached sample map into your map.
  7. Copy paste all the triggers from the attached sample map into your map. Make sure all the triggers under Codex Entries category have the correct player set in the event. Only one player should be allowed to pick codex entries effectively.
  8. Re-assign the items types you defined to each entry item type variable in the trigger editor. This is done by assigning the correct item to each variable default value.
  9. Place the scroll items into your map.
  10. Add to your map root the two functions required to load the .toc files defining the frames which overwrite the default UI. Please refer to the sample map for additional detail.

You can also check out the in-depth tutorial at the third page to learn how the system works and cover each aspect of its configuration in details.
Finally, please note that this system was only tested on Reforged graphics, but it is compatible with Classic graphics too (except for the linked scroll model). It requires UI frame natives, so only versions after 1.32 are supported.

Lua:
-- Codex UI

function CodexDialogUpdateEntries()
    local codexDialogEntryOneTitle = BlzGetFrameByName("CodexDialogEntryTopLeftTitle",0)
    local codexDialogEntryTwoTitle = BlzGetFrameByName("CodexDialogEntryTopRightTitle",0)
    local codexDialogEntryThreeTitle = BlzGetFrameByName("CodexDialogEntryCenterLeftTitle",0)
    local codexDialogEntryFourTitle = BlzGetFrameByName("CodexDialogEntryCenterRightTitle",0)
    local codexDialogEntryFiveTitle = BlzGetFrameByName("CodexDialogEntryBottomLeftTitle",0)
    local codexDialogEntrySixTitle = BlzGetFrameByName("CodexDialogEntryBottomRightTitle",0)

    -- Update all entries button titles
    if udg_Codex_EntryDiscovered01 then
        BlzFrameSetText(codexDialogEntryOneTitle, udg_Codex_EntryTitle01)
    end
    if udg_Codex_EntryDiscovered02 then
        BlzFrameSetText(codexDialogEntryTwoTitle, udg_Codex_EntryTitle02)
    end
    if udg_Codex_EntryDiscovered03 then
        BlzFrameSetText(codexDialogEntryThreeTitle, udg_Codex_EntryTitle03)
    end
    if udg_Codex_EntryDiscovered04 then
        BlzFrameSetText(codexDialogEntryFourTitle, udg_Codex_EntryTitle04)
    end
    if udg_Codex_EntryDiscovered05 then
        BlzFrameSetText(codexDialogEntryFiveTitle, udg_Codex_EntryTitle05)
    end
    if udg_Codex_EntryDiscovered06 then
        BlzFrameSetText(codexDialogEntrySixTitle, udg_Codex_EntryTitle06)
    end
end

function CodexDialogEntryAllButtonsDeselect()
    local codexDialogEntryOneButton = BlzGetFrameByName("CodexDialogEntryTopLeftButtonSelectedHighlight", 0)
    local codexDialogEntryTwoButton = BlzGetFrameByName("CodexDialogEntryTopRightButtonSelectedHighlight" , 0)
    local codexDialogEntryThreeButton = BlzGetFrameByName("CodexDialogEntryCenterLeftButtonSelectedHighlight" , 0)
    local codexDialogEntryFourButton = BlzGetFrameByName("CodexDialogEntryCenterRightButtonSelectedHighlight" , 0)
    local codexDialogEntryFiveButton = BlzGetFrameByName("CodexDialogEntryBottomLeftButtonSelectedHighlight" , 0)
    local codexDialogEntrySixButton = BlzGetFrameByName("CodexDialogEntryBottomRightButtonSelectedHighlight" , 0)
    local codexDialogDisplay = BlzGetFrameByName("CodexDialogDisplay" , 0)

    -- Remove all highlights from the buttons
    BlzFrameSetVisible(codexDialogEntryOneButton, false)
    BlzFrameSetVisible(codexDialogEntryTwoButton, false)
    BlzFrameSetVisible(codexDialogEntryThreeButton, false)
    BlzFrameSetVisible(codexDialogEntryFourButton, false)
    BlzFrameSetVisible(codexDialogEntryFiveButton, false)
    BlzFrameSetVisible(codexDialogEntrySixButton, false)

    -- Hide the display
    BlzFrameSetVisible(codexDialogDisplay, false)

    -- Set the selected value to an invalid value
    udg_Codex_UISelectedEntry = -1
end

function CodexDialogSelectEntry(number)
    local codexDialogDisplay = BlzGetFrameByName("CodexDialogDisplay" , 0)
    local codexDialogDisplayTitle = BlzGetFrameByName("CodexDialogDisplayTitle" , 0)

    if number <= udg_Codex_EntriesNumber then
        -- Set the selected value to the selected button
        udg_Codex_UISelectedEntry = number
        -- Highlight the selected button and setup title and content then show display if discovered
        local buttonSelectedHighlight
        if number == 1 then
            buttonSelectedHighlight = BlzGetFrameByName("CodexDialogEntryTopLeftButtonSelectedHighlight", 0)
            if udg_Codex_EntryDiscovered01 then
                BlzFrameSetText(codexDialogDisplayTitle, udg_Codex_EntryTitle01)
                BlzFrameSetText(codexDialogDisplay, udg_Codex_EntryContent01)
                BlzFrameSetVisible(codexDialogDisplay, true)
                BlzFrameSetEnable(codexDialogDisplay, false)
            end
        elseif number == 2 then
            buttonSelectedHighlight = BlzGetFrameByName("CodexDialogEntryTopRightButtonSelectedHighlight" , 0)
            if udg_Codex_EntryDiscovered02 then
                BlzFrameSetText(codexDialogDisplayTitle, udg_Codex_EntryTitle02)
                BlzFrameSetText(codexDialogDisplay, udg_Codex_EntryContent02)
                BlzFrameSetVisible(codexDialogDisplay, true)
                BlzFrameSetEnable(codexDialogDisplay, false)
            end
        elseif number == 3 then
            buttonSelectedHighlight = BlzGetFrameByName("CodexDialogEntryCenterLeftButtonSelectedHighlight" , 0)
            if udg_Codex_EntryDiscovered03 then
                BlzFrameSetText(codexDialogDisplayTitle, udg_Codex_EntryTitle03)
                BlzFrameSetText(codexDialogDisplay, udg_Codex_EntryContent03)
                BlzFrameSetVisible(codexDialogDisplay, true)
                BlzFrameSetEnable(codexDialogDisplay, false)
            end
        elseif number == 4 then
            buttonSelectedHighlight = BlzGetFrameByName("CodexDialogEntryCenterRightButtonSelectedHighlight" , 0)
            if udg_Codex_EntryDiscovered04 then
                BlzFrameSetText(codexDialogDisplayTitle, udg_Codex_EntryTitle04)
                BlzFrameSetText(codexDialogDisplay, udg_Codex_EntryContent04)
                BlzFrameSetVisible(codexDialogDisplay, true)
                BlzFrameSetEnable(codexDialogDisplay, false)
            end
        elseif number == 5 then
            buttonSelectedHighlight = BlzGetFrameByName("CodexDialogEntryBottomLeftButtonSelectedHighlight" , 0)
            if udg_Codex_EntryDiscovered05 then
                BlzFrameSetText(codexDialogDisplayTitle, udg_Codex_EntryTitle05)
                BlzFrameSetText(codexDialogDisplay, udg_Codex_EntryContent05)
                BlzFrameSetVisible(codexDialogDisplay, true)
                BlzFrameSetEnable(codexDialogDisplay, false)
            end
        elseif number == 6 then
            buttonSelectedHighlight = BlzGetFrameByName("CodexDialogEntryBottomRightButtonSelectedHighlight" , 0)
            if udg_Codex_EntryDiscovered06 then
                BlzFrameSetText(codexDialogDisplayTitle, udg_Codex_EntryTitle06)
                BlzFrameSetText(codexDialogDisplay, udg_Codex_EntryContent06)
                BlzFrameSetVisible(codexDialogDisplay, true)
                BlzFrameSetEnable(codexDialogDisplay, false)
            end
        end
        BlzFrameSetVisible(buttonSelectedHighlight, true)
    else
        -- Set the selected value to an invalid value
        udg_Codex_UISelectedEntry = -1

        -- Hide the display
        BlzFrameSetVisible(codexDialogDisplay, false)
    end
end

function CodexDialogEntryOneButtonClickAction()
    CodexDialogEntryAllButtonsDeselect()
    CodexDialogSelectEntry(1)
end

function CodexDialogEntryTwoButtonClickAction()
    CodexDialogEntryAllButtonsDeselect()
    CodexDialogSelectEntry(2)
end

function CodexDialogEntryThreeButtonClickAction()
    CodexDialogEntryAllButtonsDeselect()
    CodexDialogSelectEntry(3)
end

function CodexDialogEntryFourButtonClickAction()
    CodexDialogEntryAllButtonsDeselect()
    CodexDialogSelectEntry(4)
end

function CodexDialogEntryFiveButtonClickAction()
    CodexDialogEntryAllButtonsDeselect()
    CodexDialogSelectEntry(5)
end

function CodexDialogEntrySixButtonClickAction()
    CodexDialogEntryAllButtonsDeselect()
    CodexDialogSelectEntry(6)
end

function CodexDialogDoneButtonClickAction()
    local allianceDialog = BlzGetFrameByName("AllianceDialog", 0)
    local allianceAcceptButton = BlzGetFrameByName("AllianceAcceptButton", 0)

    -- Click on the alliance dialog button (focus is required to return control to player)
    BlzFrameSetFocus(allianceDialog, true)
    BlzFrameClick(allianceAcceptButton)
end

function SetupCodexDialog(codexEntries)
    local codexDialogEntryOne
    local codexDialogEntryOneButton
    local codexDialogEntryOneButtonTrigger = gg_trg_Codex_UI_Entry_One_Button_Clicked
    local codexDialogEntryTwo
    local codexDialogEntryTwoButton
    local codexDialogEntryTwoButtonTrigger = gg_trg_Codex_UI_Entry_Two_Button_Clicked
    local codexDialogEntryThree
    local codexDialogEntryThreeButton
    local codexDialogEntryThreeButtonTrigger = gg_trg_Codex_UI_Entry_Three_Button_Clicked
    local codexDialogEntryFour
    local codexDialogEntryFourButton
    local codexDialogEntryFourButtonTrigger = gg_trg_Codex_UI_Entry_Four_Button_Clicked
    local codexDialogEntryFive
    local codexDialogEntryFiveButton
    local codexDialogEntryFiveButtonTrigger = gg_trg_Codex_UI_Entry_Five_Button_Clicked
    local codexDialogEntrySix
    local codexDialogEntrySixButton
    local codexDialogEntrySixButtonTrigger = gg_trg_Codex_UI_Entry_Six_Button_Clicked
    local codexDialogDoneButton
    local codexDialogDoneButtonTrigger = gg_trg_Codex_UI_Done_Button_Clicked
    local codexUIReloadTrigger = gg_trg_Codex_UI_Reload

    -- Hide all alliance dialog default UI
    BlzFrameSetVisible(BlzGetFrameByName("AllianceBackdrop", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("AllianceTitle", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("ResourceTradingTitle", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("PlayersHeader", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("AllyHeader", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("VisionHeader", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("UnitsHeader", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("GoldHeader", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("LumberHeader", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("AllianceCancelButton", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("AlliedVictoryCheckBox", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("AlliedVictoryLabel", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("AllianceDialogScrollBar", 0), false)
    BlzFrameSetVisible(BlzGetFrameByName("AllianceAcceptButton", 0), false)

    -- Create the codex dialog as child of the alliance dialog (since it's bigger, it works well)
    -- Note: this makes the dialog appear when the alliance dialog is shown by the game, we also make sure to not have a leaking equal dialog
    BlzDestroyFrame(BlzGetFrameByName("CodexDialog",0))
        BlzCreateFrame("CodexDialog", BlzGetFrameByName("AllianceDialog",0), 0,0)

    -- Setup the done button events
    codexDialogDoneButton = BlzGetFrameByName("CodexDialogDoneButton" , 0)
    BlzTriggerRegisterFrameEvent(codexDialogDoneButtonTrigger, codexDialogDoneButton, FRAMEEVENT_CONTROL_CLICK)

    -- Setup the entry one button events (also select it by default)
    codexDialogEntryOne = BlzGetFrameByName("CodexDialogEntryTopLeft" , 0)
    if codexEntries > 0 then
        codexDialogEntryOneButton = BlzGetFrameByName("CodexDialogEntryTopLeftButton" , 0)
        BlzTriggerRegisterFrameEvent(codexDialogEntryOneButtonTrigger, codexDialogEntryOneButton, FRAMEEVENT_CONTROL_CLICK)
        CodexDialogEntryAllButtonsDeselect()
        CodexDialogSelectEntry(1)
    else
        BlzFrameSetVisible(codexDialogEntryOne, false)
    end

    -- Setup the entry two button events
    codexDialogEntryTwo = BlzGetFrameByName("CodexDialogEntryTopRight" , 0)
    if codexEntries > 1 then
        codexDialogEntryTwoButton = BlzGetFrameByName("CodexDialogEntryTopRightButton" , 0)
        BlzTriggerRegisterFrameEvent(codexDialogEntryTwoButtonTrigger, codexDialogEntryTwoButton, FRAMEEVENT_CONTROL_CLICK)
    else
        BlzFrameSetVisible(codexDialogEntryTwo, false)
    end

    -- Setup the entry three button events
    codexDialogEntryThree = BlzGetFrameByName("CodexDialogEntryCenterLeft" , 0)
    if codexEntries > 2 then
        codexDialogEntryThreeButton = BlzGetFrameByName("CodexDialogEntryCenterLeftButton" , 0)
        BlzTriggerRegisterFrameEvent(codexDialogEntryThreeButtonTrigger, codexDialogEntryThreeButton, FRAMEEVENT_CONTROL_CLICK)
    else
        BlzFrameSetVisible(codexDialogEntryThree, false)
    end

    -- Setup the entry four button events
    codexDialogEntryFour = BlzGetFrameByName("CodexDialogEntryCenterRight" , 0)
    if codexEntries > 3 then
        codexDialogEntryFourButton = BlzGetFrameByName("CodexDialogEntryCenterRightButton" , 0)
        BlzTriggerRegisterFrameEvent(codexDialogEntryFourButtonTrigger, codexDialogEntryFourButton, FRAMEEVENT_CONTROL_CLICK)
    else
        BlzFrameSetVisible(codexDialogEntryFour, false)
    end

    -- Setup the entry five button events
    codexDialogEntryFive = BlzGetFrameByName("CodexDialogEntryBottomLeft" , 0)
    if codexEntries > 4 then
        codexDialogEntryFiveButton = BlzGetFrameByName("CodexDialogEntryBottomLeftButton" , 0)
        BlzTriggerRegisterFrameEvent(codexDialogEntryFiveButtonTrigger, codexDialogEntryFiveButton, FRAMEEVENT_CONTROL_CLICK)
    else
        BlzFrameSetVisible(codexDialogEntryFive, false)
    end

    -- Setup the entry six button events
    codexDialogEntrySix = BlzGetFrameByName("CodexDialogEntryBottomRight" , 0)
    if codexEntries > 5 then
        codexDialogEntrySixButton = BlzGetFrameByName("CodexDialogEntryBottomRightButton" , 0)
        BlzTriggerRegisterFrameEvent(codexDialogEntrySixButtonTrigger, codexDialogEntrySixButton, FRAMEEVENT_CONTROL_CLICK)
    else
        BlzFrameSetVisible(codexDialogEntrySix, false)
    end

    -- Make sure to update all entries (this is useful when the map is reloaded)
    CodexDialogUpdateEntries()
end

function AlliesButtonKeepEnabled()
    local alliesButton = BlzGetFrameByName("UpperButtonBarAlliesButton",0)
    local menuButton = BlzGetFrameByName("UpperButtonBarMenuButton",0)

    -- Enable the allies button whenever the menu button is also enabled
    if BlzFrameGetEnable(menuButton) then
        if not BlzFrameGetEnable(alliesButton) then
            BlzFrameSetEnable(alliesButton, true)
        end
    end
end

function AllianceDialogKeepPaused()
    local lastSelectedEntry = udg_Codex_UISelectedEntry
    local allianceDialog = BlzGetFrameByName("AllianceDialog",0)

    -- Pause the game when alliance dialog is shown/hidden
    if BlzFrameIsVisible(allianceDialog) then
        if not udg_Codex_UIEnabled then
            -- Go into pause system
            udg_Codex_UIEnabled = true
            ConditionalTriggerExecute(gg_trg_Codex_UI_Pause)
            ConditionalTriggerExecute(gg_trg_Codex_UI_Maintenance_Menu)

            -- Reselect the last selected entry to update display
            CodexDialogEntryAllButtonsDeselect()
            CodexDialogSelectEntry(lastSelectedEntry)
        end
    end
end

function AllianceDialogClearPaused()
    local allianceDialog = BlzGetFrameByName("AllianceDialog",0)
    local codexDialogDisplay = BlzGetFrameByName("CodexDialogDisplay" , 0)

    -- Loop always when the alliance dialog is open (this is not stopped by the game pause)
    -- Note: Stop the loop (and then the trigger) as soon as the alliance menu is closed and the game unpaused
    while true
    do
        TriggerSleepAction(0.25)
        -- Keep the focus on the alliance dialog to avoid bugs on the player focus
        BlzFrameSetFocus(allianceDialog, true)
        if not BlzFrameIsVisible(allianceDialog) then
            if udg_Codex_UIEnabled then
                udg_Codex_UIEnabled = false
                ConditionalTriggerExecute(gg_trg_Codex_UI_Unpause)
            end
        end
        -- Try to avoid the nasty bug on the game world
        if not udg_Codex_UIEnabled then
            BlzFrameSetFocus(allianceDialog, false)
            BlzFrameSetEnable(codexDialogDisplay, false)
            BlzFrameSetFocus(BlzGetOriginFrame(ORIGIN_FRAME_WORLD_FRAME, 0), true)
            break
        end
    end
end

KNOWLEDGE REQUIRED
  • Advanced knowledge of the trigger editor
  • Advanced knowledge of JASS or Lua and GUI Custom Script action
  • Basic knowledge of the frames natives (suggested reading: The Big UI-Frame Tutorial)
  • Basic knowledge on how to localize assets on the Warcraft 3 Reforged World Editor
TOOLS REQUIRED
  • Warcraft 3 Reforged World Editor

TABLE OF CONTENT
  1. CODEX UI: FDF AND TOC FILES
  2. CODEX UI: CUSTOM SCRIPTS
  3. CODEX UI: TRIGGERS
  4. CODEX ENTRIES: TRIGGERS AND VARIABLES
  5. CODEX SETUP: INITIALIZATION AND ITEMS


CODEX UI: FDF AND TOC FILES
This section illustrates the .fdf and .toc files designed for the Codex system and how to load them into your map.

For what .fdf and .toc files are, I suggest reading the exhaustive and very clear Big UI-Frame Tutorial. In short, it defines how the UI looks for that specific element. In this case, the following file defines how the codex dialog looks:


Code:
// -- INCLUDE FILES ---------------------------------------------------------

IncludeFile "UI\FrameDef\UI\EscMenuTemplates.fdf",
IncludeFile "UI\FrameDef\UI\QuestDialog.fdf",

// -- LOCAL TEMPLATES -------------------------------------------------------

// -- STRING LIST (HOTKEYS) ---------------------------------------------------------

StringList
{
    CodexDialogEntryOneButtonKey "1",
    CodexDialogEntryTwoButtonKey "2",
    CodexDialogEntryThreeButtonKey "3",
    CodexDialogEntryFourButtonKey "4",
    CodexDialogEntryFiveButtonKey "5",
    CodexDialogEntrySixButtonKey "6",
}

// -- FRAMES ---------------------------------------------------------

// --- MAIN FRAME: CODEX DIALOG
Frame "FRAME" "CodexDialog"
{
    Width 0.400f,
    Height 0.430f,
    SetPoint CENTER, "ConsoleUI", CENTER, 0, 0.05,
    TabFocusPush,

    // --- CODEX DIALOG BACKDROP
    Frame "BACKDROP" "CodexDialogBackdrop"
    {
        SetAllPoints,
        DecorateFileNames,
        BackdropTileBackground,
        BackdropBackground  "EscMenuBackground",
        BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
        BackdropCornerSize  0.048,
        BackdropBackgroundSize  0.128,
        BackdropBackgroundInsets 0.01 0.01 0.01 0.01,
        BackdropEdgeFile  "EscMenuBorder",
        BackdropBlendAll,
    }

    // --- CODEX DIALOG TITLE
    Frame "TEXT" "CodexDialogTitle" INHERITS "EscMenuTitleTextTemplate"
    {
        SetPoint TOP, "CodexDialog", TOP, 0.0, -0.03,
        FontJustificationH JUSTIFYCENTER,
        Text "CODEX_TITLE",
    }

    // --- CODEX DIALOG ENTRIES (SIX IN TOTAL)
    Frame "Frame" "CodexDialogEntryList"
    {
        SetPoint TOPLEFT, "CodexDialog", TOPLEFT, 0.025, -0.05,
        SetPoint BOTTOMRIGHT, "CodexDialog", RIGHT, -0.025, 0.02,

        // --- CODEX DIALOG ENTRY ONE (TOP LEFT)
        Frame "FRAME" "CodexDialogEntryTopLeft"
        {
            Height 0.035,
            Width 0.165,
            SetPoint TOPLEFT, "CodexDialogEntryList", TOPLEFT, 0.005, -0.005,

            Frame "GLUEBUTTON" "CodexDialogEntryTopLeftButton" INHERITS WITHCHILDREN "QuestButtonTemplate"
            {
                UseActiveContext,
                SetAllPoints,
                ControlStyle "AUTOTRACK",
                ControlShortcutKey "CodexDialogEntryOneButtonKey",

                Frame "HIGHLIGHT" "CodexDialogEntryTopLeftButtonSelectedHighlight" INHERITS WITHCHILDREN "QuestButtonMouseOverHighlightTemplate"
                {
                    UseActiveContext,
                    SetAllPoints,
                }
            }

            Frame "TEXT" "CodexDialogEntryTopLeftTitle" INHERITS "EscMenuInfoTextTemplate"
            {
                FrameFont "MasterFont", 0.009,"",
                UseActiveContext,
                SetPoint TOP, "CodexDialogEntryTopLeftButton", TOP, 0.000, -0.01,
                FontColor 1.0 1.0 1.0 1.0,
                FontHighlightColor 1.0 1.0 1.0 1.0,
                FontDisabledColor 0.4 0.5 0.6 0.7,
                FontJustificationH JUSTIFYLEFT,
                FontJustificationOffset 0.0 0.0,
                Text "CODEX_ENTRY_UNDISCOVERED",
            }
        }

        // --- CODEX DIALOG ENTRY TWO (TOP RIGHT)
        Frame "FRAME" "CodexDialogEntryTopRight"
        {
            Height 0.035,
            Width 0.165,
            SetPoint TOPRIGHT, "CodexDialogEntryList", TOPRIGHT, -0.005, -0.005,

            Frame "GLUEBUTTON" "CodexDialogEntryTopRightButton" INHERITS WITHCHILDREN "QuestButtonTemplate"
            {
                UseActiveContext,
                SetAllPoints,
                ControlStyle "AUTOTRACK",
                ControlShortcutKey "CodexDialogEntryTwoButtonKey",

                Frame "HIGHLIGHT" "CodexDialogEntryTopRightButtonSelectedHighlight" INHERITS WITHCHILDREN "QuestButtonMouseOverHighlightTemplate"
                {
                    UseActiveContext,
                    SetAllPoints,
                }
            }

            Frame "TEXT" "CodexDialogEntryTopRightTitle" INHERITS "EscMenuInfoTextTemplate"
            {
                FrameFont "MasterFont", 0.009,"",
                UseActiveContext,
                SetPoint TOP, "CodexDialogEntryTopRightButton", TOP, 0.000, -0.01,
                FontColor 1.0 1.0 1.0 1.0,
                FontHighlightColor 1.0 1.0 1.0 1.0,
                FontDisabledColor 0.4 0.5 0.6 0.7,
                FontJustificationH JUSTIFYLEFT,
                FontJustificationOffset 0.0 0.0,
                Text "CODEX_ENTRY_UNDISCOVERED",
            }
        }

        // --- CODEX DIALOG ENTRY THREE (CENTER LEFT)
        Frame "FRAME" "CodexDialogEntryCenterLeft"
        {
            Height 0.035,
            Width 0.165,
            SetPoint LEFT, "CodexDialogEntryList", LEFT, 0.005, 0.0,

            Frame "GLUEBUTTON" "CodexDialogEntryCenterLeftButton" INHERITS WITHCHILDREN "QuestButtonTemplate"
            {
                UseActiveContext,
                SetAllPoints,
                ControlStyle "AUTOTRACK",
                ControlShortcutKey "CodexDialogEntryThreeButtonKey",

                Frame "HIGHLIGHT" "CodexDialogEntryCenterLeftButtonSelectedHighlight" INHERITS WITHCHILDREN "QuestButtonMouseOverHighlightTemplate"
                {
                    UseActiveContext,
                    SetAllPoints,
                }
            }

            Frame "TEXT" "CodexDialogEntryCenterLeftTitle" INHERITS "EscMenuInfoTextTemplate"
            {
                FrameFont "MasterFont", 0.009,"",
                UseActiveContext,
                SetPoint TOP, "CodexDialogEntryCenterLeftButton", TOP, 0.000, -0.01,
                FontColor 1.0 1.0 1.0 1.0,
                FontHighlightColor 1.0 1.0 1.0 1.0,
                FontDisabledColor 0.4 0.5 0.6 0.7,
                FontJustificationH JUSTIFYLEFT,
                FontJustificationOffset 0.0 0.0,
                Text "CODEX_ENTRY_UNDISCOVERED",
            }
        }

        // --- CODEX DIALOG ENTRY FOUR (CENTER RIGHT)
        Frame "FRAME" "CodexDialogEntryCenterRight"
        {
            Height 0.035,
            Width 0.165,
            SetPoint RIGHT, "CodexDialogEntryList", RIGHT, -0.005, 0.0,

            Frame "GLUEBUTTON" "CodexDialogEntryCenterRightButton" INHERITS WITHCHILDREN "QuestButtonTemplate"
            {
                UseActiveContext,
                SetAllPoints,
                ControlStyle "AUTOTRACK",
                ControlShortcutKey "CodexDialogEntryFourButtonKey",

                Frame "HIGHLIGHT" "CodexDialogEntryCenterRightButtonSelectedHighlight" INHERITS WITHCHILDREN "QuestButtonMouseOverHighlightTemplate"
                {
                    UseActiveContext,
                    SetAllPoints,
                }
            }

            Frame "TEXT" "CodexDialogEntryCenterRightTitle" INHERITS "EscMenuInfoTextTemplate"
            {
                FrameFont "MasterFont", 0.009,"",
                UseActiveContext,
                SetPoint TOP, "CodexDialogEntryCenterRightButton", TOP, 0.000, -0.01,
                FontColor 1.0 1.0 1.0 1.0,
                FontHighlightColor 1.0 1.0 1.0 1.0,
                FontDisabledColor 0.4 0.5 0.6 0.7,
                FontJustificationH JUSTIFYLEFT,
                FontJustificationOffset 0.0 0.0,
                Text "CODEX_ENTRY_UNDISCOVERED",
            }
        }

        // --- CODEX DIALOG ENTRY FIVE (BOTTOM LEFT)
        Frame "FRAME" "CodexDialogEntryBottomLeft"
        {
            Height 0.035,
            Width 0.165,
            SetPoint BOTTOMLEFT, "CodexDialogEntryList", BOTTOMLEFT, 0.005, 0.005,

            Frame "GLUEBUTTON" "CodexDialogEntryBottomLeftButton" INHERITS WITHCHILDREN "QuestButtonTemplate"
            {
                UseActiveContext,
                SetAllPoints,
                ControlStyle "AUTOTRACK",
                ControlShortcutKey "CodexDialogEntryFiveButtonKey",

                Frame "HIGHLIGHT" "CodexDialogEntryBottomLeftButtonSelectedHighlight" INHERITS WITHCHILDREN "QuestButtonMouseOverHighlightTemplate"
                {
                    UseActiveContext,
                    SetAllPoints,
                }
            }

            Frame "TEXT" "CodexDialogEntryBottomLeftTitle" INHERITS "EscMenuInfoTextTemplate"
            {
                FrameFont "MasterFont", 0.009,"",
                UseActiveContext,
                SetPoint TOP, "CodexDialogEntryBottomLeftButton", TOP, 0.000, -0.01,
                FontColor 1.0 1.0 1.0 1.0,
                FontHighlightColor 1.0 1.0 1.0 1.0,
                FontDisabledColor 0.4 0.5 0.6 0.7,
                FontJustificationH JUSTIFYCENTER,
                FontJustificationOffset 0.0 0.0,
                Text "CODEX_ENTRY_UNDISCOVERED",
            }
        }

        // --- CODEX DIALOG ENTRY SIX (BOTTOM RIGHT)
        Frame "FRAME" "CodexDialogEntryBottomRight"
        {
            Height 0.035,
            Width 0.165,
            SetPoint BOTTOMRIGHT, "CodexDialogEntryList", BOTTOMRIGHT, -0.005, 0.005,

            Frame "GLUEBUTTON" "CodexDialogEntryBottomRightButton" INHERITS WITHCHILDREN "QuestButtonTemplate"
            {
                UseActiveContext,
                SetAllPoints,
                ControlStyle "AUTOTRACK",
                ControlShortcutKey "CodexDialogEntrySixButtonKey",

                Frame "HIGHLIGHT" "CodexDialogEntryBottomRightButtonSelectedHighlight" INHERITS WITHCHILDREN "QuestButtonMouseOverHighlightTemplate"
                {
                    UseActiveContext,
                    SetAllPoints,
                }
            }

            Frame "TEXT" "CodexDialogEntryBottomRightTitle" INHERITS "EscMenuInfoTextTemplate"
            {
                FrameFont "MasterFont", 0.009,"",
                UseActiveContext,
                SetPoint TOP, "CodexDialogEntryBottomRightButton", TOP, 0.000, -0.01,
                FontColor 1.0 1.0 1.0 1.0,
                FontHighlightColor 1.0 1.0 1.0 1.0,
                FontDisabledColor 0.4 0.5 0.6 0.7,
                FontJustificationH JUSTIFYCENTER,
                FontJustificationOffset 0.0 0.0,
                Text "CODEX_ENTRY_UNDISCOVERED",
            }
        }
    }

    // --- CODEX DIALOG DISPLAY
    Frame "TEXTAREA" "CodexDialogDisplay"
    {
        SetPoint TOPLEFT, "CodexDialog", LEFT, 0.030, -0.0025,
        SetPoint BOTTOMRIGHT, "CodexDialog", BOTTOMRIGHT, -0.030, 0.065,
        DecorateFileNames,
        FrameFont "MasterFont", 0.011,"",
        TextAreaLineGap         0.001,
        TextAreaMaxLines        32,
        TextAreaLineHeight      0.011,
        TextAreaInset           0.015,

        // --- CODEX DIALOG DISPLAY SCROLLBAR
        TextAreaScrollBar "CodexDialogDisplayScrollBar",
        Frame "SCROLLBAR" "CodexDialogDisplayScrollBar" INHERITS WITHCHILDREN "EscMenuScrollBarTemplate"
        {
            SetPoint TOPRIGHT, "CodexDialogDisplay", TOPRIGHT, 0.015, 0,
        }

        // --- CODEX DIALOG DISPLAY BACKDROP
        Frame "BACKDROP" "CodexDialogDisplayBackdrop"
        {
            SetAllPoints,
            DecorateFileNames,
            BackdropTileBackground,
            BackdropBackground          "EscMenuEditBoxBackground",
            BackdropCornerFlags         "UL|UR|BL|BR|T|L|B|R",
            BackdropCornerSize          0.0125,
            BackdropBackgroundSize      0.256,
            BackdropBackgroundInsets    0.005 0.005 0.005 0.005,
            BackdropEdgeFile            "EscMenuEditBoxBorder",
            BackdropBlendAll,
        }

        // --- LORE DIALOG DISPLAY TITLE
        Frame "TEXT" "CodexDialogDisplayTitle" INHERITS "EscMenuTitleTextTemplate" {
            Width 0.25,
            DecorateFileNames,
            SetPoint BOTTOMLEFT, "CodexDialogDisplay", TOPLEFT, 0.002, -0.001,
            FrameFont "MasterFont", 0.013,"",
            FontJustificationH JUSTIFYLEFT,
            FontFlags "FIXEDSIZE",
            Text "CODEX_ENTRY_UNDISCOVERED",
        }
    }

    // --- CODEX DIALOG DONE BUTTON (automatically localized)
    Frame "GLUETEXTBUTTON" "CodexDialogDoneButton" INHERITS WITHCHILDREN "EscMenuButtonTemplate"
    {
        Width 0.13,
        SetPoint BOTTOM, "CodexDialog", BOTTOM, 0.0, 0.03,

        ButtonText "CodexDialogDoneButtonText",
        Frame "TEXT" "CodexDialogDoneButtonText" INHERITS "EscMenuButtonTextTemplate"
        {
            Text "QUESTACCEPT",
        }
    }
}

Please note that only not localized strings are defined within this file. This file is structured as follows:
  1. Main Frame: the dialog itself, containing of a backdrop graphics, a title (the codex name), a scrollable textarea (where the information of each codex entry is contained), an exit button and a list of frames, one for each possible entry (6 in total)
  2. Codex Entry Frame: each one of these frames consists in a button with an highlight and a text representing the codex entry title. Please note that each one of them has a name we can use to reference them in code
  3. Codex Dialog Textarea Frame: the area where each codex entry information is displayed, consisting in a scrollbar, a title (where the codex entry title is displayed again) and a backdrop graphics
To localize the .fdf defined above, we need to use another .fdf containing the relative strings. Note that this is not necessary but makes it much easier to maintain when multiple localizations are added. The following files contain the english version of the codex dialog strings:


Code:
// -- STRING LIST ---------------------------------------------------------

StringList
{
    CODEX_TITLE "Codex",
    CODEX_ENTRY_UNDISCOVERED "Entry not yet discovered",
}

To assemble them together in game, we need to define a .toc file. This file is imported into the map alongside the .fdf and can be loaded using a native call in the custom scripts. The file is as follows, just to load the strings and then the dialog frames, in this order:


Code:
UI\FrameDef\CodexDialogStrings.fdf
UI\FrameDef\CodexDialog.fdf

The codex button replaces the allies button. Also, the codex dialog is scripted to be shown when the allies dialog is shown. To do this, we need to make sure the alliance dialog is not visibile underneath our own and all the appropriate text is correctly displayed in all various languages on the menu bar and in the relative tooltip. In order to do this, we need to add two new .fdf files, as follows (note the second one replaces all the global strings of the game UI, while the first overwrites the default alliance dialog frames):


Code:
// -- INCLUDE FILES ---------------------------------------------

IncludeFile "UI\FrameDef\UI\EscMenuTemplates.fdf",

// -- LOCAL TEMPLATES -------------------------------------------

// -- FRAMES ----------------------------------------------------

Frame "FRAME" "AllianceSlot" {
    Height 0.0,
    Width  0.0,

    Frame "BACKDROP" "ColorBackdrop" {
        UseActiveContext,
        SetPoint LEFT, "AllianceSlot", LEFT, 0.015, 0.0,
        Height 0.0,
        Width 0.0,

        Frame "BACKDROP" "ColorBorder" {
            UseActiveContext,
            SetAllPoints,
            DecorateFileNames,
            BackdropBlendAll,
            BackdropBackground  "EscMenuCheckBoxBackground",
        BackdropBackgroundInsets -0.005 -0.005 -0.005 -0.005,
        }
    }

    Frame "TEXT" "PlayerNameLabel" INHERITS "EscMenuTitleTextTemplate" {
        UseActiveContext,
        Width 0.0,
        SetPoint LEFT, "ColorBackdrop", RIGHT, 0.0, 0.0,
    }

    Frame "GLUECHECKBOX" "AllyCheckBox" INHERITS WITHCHILDREN "EscMenuCheckBoxTemplate" {
        UseActiveContext,
        SetPoint LEFT, "ColorBackdrop", RIGHT, 0.0, 0.0,
        Height 0.0,
        Width 0.0,
    }

    Frame "GLUECHECKBOX" "VisionCheckBox" INHERITS WITHCHILDREN "EscMenuCheckBoxTemplate" {
        UseActiveContext,
        SetPoint LEFT, "AllyCheckBox", RIGHT, 0.0, 0.0,
        Height 0.0,
        Width 0.0,
    }

    Frame "GLUECHECKBOX" "UnitsCheckBox" INHERITS WITHCHILDREN "EscMenuCheckBoxTemplate" {
        UseActiveContext,
        SetPoint LEFT, "VisionCheckBox", RIGHT, 0.0, 0.0,
        Height 0.0,
        Width 0.0,
    }

    Frame "BACKDROP" "GoldBackdrop" {
        Height 0.0,
        Width 0.0,
        UseActiveContext,
        SetPoint LEFT, "UnitsCheckBox", RIGHT, 0.0, 0.0,
        DecorateFileNames,
        BackdropBackground  "AllianceGold",
        BackdropBlendAll,

        Frame "TEXT" "GoldText" INHERITS "EscMenuLabelTextTemplate" {
            UseActiveContext,
            SetPoint RIGHT, "GoldBackdrop", RIGHT, 0.0, 0.0,
            Height 0.0,
            Width 0.0,
            FontJustificationH JUSTIFYRIGHT,
            FontJustificationV JUSTIFYMIDDLE,
            FontColor 1.0 1.0 1.0 1.0,
        }
    }


    Frame "BACKDROP" "LumberBackdrop" {
        Height 0.0,
        Width 0.0,
        UseActiveContext,
        SetPoint LEFT, "GoldBackdrop", RIGHT, 0.0, 0.0,
        DecorateFileNames,
        BackdropBackground  "AllianceLumber",
        BackdropBlendAll,

        Frame "TEXT" "LumberText" INHERITS "EscMenuLabelTextTemplate" {
            UseActiveContext,
            SetPoint RIGHT, "LumberBackdrop", RIGHT, 0.0, 0.001,
            Height 0.0,
            Width 0.0,
            FontJustificationH JUSTIFYRIGHT,
            FontJustificationV JUSTIFYMIDDLE,
            FontColor 1.0 1.0 1.0 1.0,
        }
    }
}


/*
  • Global Strings
  • --------------
*
  • This file is a centralized location for storing strings which are
  • used through out the glue screens and in-game ui. The identifiers
  • in the first column are unique, and must not be re-declared in a
  • StringList in any .fdf file.
*
*/

StringList {

ACCEPT "Accept",
ACCOUNT_CREATION "Account Creation",
ADD "Add",
ADVANCED_OPTIONS "Advanced Options",
ALL "All",
ALLIANCES "Alliances",
ALLIED_ONLY "Allied Only",
ALLIED_VICTORY "Allied Victory",
ALLIES "Codex",
ALLOWED "Allowed",
ALLOWED_ON_DEATH "Allowed On Death",
ALLY "Ally",
ALLY_RESOURCES "Resources (%s)",
ALWAYS_VISIBLE "Always Visible",
AMBIENT_SOUNDS "Ambient Sounds",
ANY_CREATOR "Any Creator",
ANY_MODE "Any Mode",
ANY_TYPE "Any Type",
ANY_SIZE "Any Size",
ANIMATED "Animated",
AUTOSAVE_REPLAY "Automatically Save Replays",
AUTOSAVE_REPLAY_INFO "This option will automatically save replays to the replay/autosaved folder.",
BLIZZARD "Blizzard",
BNET_ROC_DISABLED "Please use The Frozen Throne for online play",
BNET_ANON_FIND_TITLE_STANDARD "Standard Game Search",
BNET_ANON_FIND_TITLE_TOURNAMENT "Tournament Game Search",
BNET_ANON_FIND_TITLE_SCHEDULED "Scheduled Game",
BNET_CHANNEL_TITLE "Battle.net Channel Selection",
BNET_CHANNEL_INFO "To join or create a Private Channel, enter a channel name below.|n|nTo join a Public Channel, choose one from the list above or enter the desired channel name below.",
BNET_INGAME_DISCONNECT "Your connection to Battle.net has been lost. Current game is still valid and results will be processed.",
BNET_INGAME_LOGOUT "You have been logged out of Battle.net. Current game is still valid and results will be processed.",
BNET_INGAME_RECONNECT "Your connection to Battle.net has been restored.",
BNET_STANDARD_GAME_TIP "|Cfffed312P|Rlay Game|n|nThe best method for playing a game on Battle.net. Select your desired game type and map preferences, and Battle.net will match you with allies and opponents of the appropriate skill.",
BNET_STANDARD_GAME_TIP_DISABLED "The 'Play Game' feature is currently disabled on this gateway.",
BNET_QUICKSTANDARD_GAME_TIP "|Cfffed312Q|Ruick Play Game|n|nImmediately starts a standard game search using your last specified settings.",
BNET_QUICKSTANDARD_GAME_SHORTCUT "Q",
BNET_QUICKTOURNAMENT_GAME_TIP "|Cfffed312Q|Ruick Tournament Game|n|nImmediately starts a preliminary round tournament game search.",
BNET_TEAM_GAME_TIP "Arranged |Cfffed312T|Ream|n|nCreate or join a team of friends and let Battle.net automatically match you up against a team of the appropriate skill.",
BNET_TEAM_GAME_SHORTCUT "T",
BNET_TEAM_GAME_TIP_DISABLED "The 'Arranged Teams' feature is currently disabled on this gateway.",
BNET_CUSTOM_GAME_TIP "Custom |Cfffed312G|Rame|n|nCreate or join a game without Blizzard approved specifications.",
BNET_CUSTOM_GAME_SHORTCUT "G",
BNET_FRIENDS_TIP "|Cfffed312F|Rriends|n|nModify and monitor your friends list. Your friends list allows you to see where your friends currently are on Battle.net.",
BNET_CLANS_TIP "Clan|Cfffed312s|R|n|nMonitor your clan list. Your clan list allows you to see where fellow clan members are on Battle.net.",
BNET_LADDER_TIP "|Cfffed312L|Radder Info|n|nOpens the Ladder ranking webpage, where you can view the current standings in the official Blizzard ladders.",
BNET_LADDER_SHORTCUT "L",
BNET_TOURNAMENT_TIP "T|Cfffed312o|Rurnaments|n|nOpens the Tournament webpage, where you can view tournament rules and information.",
BNET_TOURNAMENT_SHORTCUT "o",
BNET_PROFILE_TIP "Prof|Cfffed312i|Rle|n|nView your current Battle.net profile.",
BNET_PROFILE_SHORTCUT "i",
BNET_OPTIONS_TIP "|Cfffed312O|Rptions|n|nModify your personal options, such as: color preferences, fonts, and chat filters.",
BNET_CLAN_INVITATION_TITLE "Battle.net Clan Invitation",
BNET_CLAN_INVITATION_INFO "To create a new Battle.net clan, exactly nine players must accept your invitation to join the new clan during the 30 second invite period. Listed below is the set of potential clan members you may select from. Choose your clan members and click the 'Invite' button to invite them into your clan.",
BNET_CLAN_INVITATION_INFO2 "A user will show up as a potential clan member below if they are a mutual friend of yours, or they are in a private chat channel with you. They must also not already be in a clan.",
BNET_CLAN_INVITATION_REFRESH "Refresh Potential Clanmates",
BNET_CLAN_INVITE_TITLE "Clan Invitation",
BNET_CLAN_INVITE_INFO "If you wish to join this clan, click |CFFFFFFFFAccept|R.|n|nOtherwise, click |CFFFFFFFFDecline|R to dismiss this invitation.",
BNET_CLAN_INVITE_TIMOUT "Invitation will auto-decline in:",
BNET_CLAN_INVITE_FORMAT_STR "|CFFFFFFFF%s|R has invited you to join a clan:",
BNET_CLAN_CHANGE_RANK "|CFFFFFFFF%s|R has changed your clan rank. (old rank: %s, new rank: %s)",
BNET_CLAN_CHANGE_LEADER "|CFFFFFFFF%s|R has designated you as the new clan leader.",
BNET_CONNECT_TITLE "Connecting to Battle.net",
BNET_CONNECT_INIT "Initiating connection to Battle.net...",
BNET_CONNECT_DOWNLOAD "Downloading data files...",
BNET_CUSTOM_JOIN_CREATE_TITLE "Battle.net Custom Game Creation",
BNET_CUSTOM_JOIN_CREATE_INFO "To create your own custom game, click the button below.",
BNET_CUSTOM_JOIN_TITLE "Battle.net Custom Games",
BNET_CUSTOM_JOIN_REFRESH "Refresh Custom Game List|N|NClears all games currently in the game list, and requests a new list from Battle.net.",
BNET_CUSTOM_CREATE_TITLE "Battle.net Custom Games",
BNET_CUSTOM_INVITE_SENT "Custom lobby invite sent to %s",
BNET_FRIEND_IN_CHANNEL_FMT "In channel '%s'",
BNET_FRIEND_IN_PASSWORD_GAME_FMT "In private game '%s'",
BNET_FRIEND_IN_PRIVATE_GAME_FMT "In private game '%s'",
BNET_FRIEND_IN_PUBLIC_GAME_FMT "In public game '%s'",
BNET_FRIEND_IN_CHANNEL "In chat channel",
BNET_FRIEND_IN_PASSWORD_GAME "In private game",
BNET_FRIEND_IN_PRIVATE_GAME "In private game",
BNET_FRIEND_IN_PUBLIC_GAME "In public game",
BNET_FRIEND_MUTUAL_FRIEND "|CFF888888(Mutual Friend)|R",
BNET_FRIEND_OFFLINE "|CFF888888(Offline)|R",
BNET_FRIEND_ONLINE "|CFFFFFFFF(Online)|R",
BNET_FRIEND_AFK "|CFFAAAAAA(Away From Keyboard)|R",
BNET_FRIEND_DND "|CFFAAAAAA(Do Not Disturb)|R",
BNET_HELP_TITLE "Battle.net Chat Help",
BNET_ICON_TIP1 "|Cfffed312Type:|R %s",
BNET_ICON_TIP2 "|Cfffed312Wins Needed:|R %d",
BNET_JOIN_CHANNEL "|CffffffffJoining Channel: |Cfffed312%s",
BNET_MOTD "Battle.net Message of the Day",
BNET_NEWS "Battle.net News Updates",
BNET_NEWS_NEW_ITEM "(NEW)",
BNET_NEWS_NEW_ITEM_COUNT "( %d New Items )", // 2 or more new items
BNET_NEWS_NEW_ITEM_COUNT_ONE "( 1 New Item )", // 1 new item
BNET_PROFILE_XPTOOLTIP "|Cfffed312Experience Points:|R %d|n|nYour Battle.net experience points are used to determine when you gain or lose a level.",
BNET_PROFILE_XPTOOLTIP_TEAM "|Cfffed312Experience Points:|R %d|n|Cfffed312Ranking:|R %s",
BNET_SCHEDULED_GAME_MESSAGE "Your scheduled Battle.net game is now starting.",
BNET_SCHEDULED_GAME_MISSED_MESSAGE "A Battle.net scheduled game of which you were a part of was missed because you could not receive the notification. You have forfeited that game.",
BNET_SCHEDULED_GAME_INFO "Your scheduled Battle.net game is now starting. If you wish to participate, select your race from the options provided and click the 'Ready' button. Otherwise click 'Forfeit' to forfeit the game and dismiss this dialog.",
BNET_SCHEDULED_GAME_TIMEOUT "This notification will auto-forfeit in:",
BNET_STATUS_ANONSEARCH_TITLE "Standard Game Search",
BNET_STATUS_ANONSEARCH_ELAPSED "Elapsed Time:",
BNET_STATUS_ANONSEARCH_AVERAGE "Average Time:",
BNET_STATUS_ANONSEARCH_SEARCH_SCHED "Waiting...",
BNET_STATUS_ANONSEARCH_TEAM_WAIT "Waiting for teammates...",
BNET_STATUS_ANONSEARCH_SEARCH "Searching...",
BNET_STATUS_ANONSEARCH_FOUND "Game found...",
BNET_STATUS_ANONSEARCH_JOINWAIT "Waiting for players...",
BNET_STATUS_ANONSEARCH_CANCEL "Canceling...",
BNET_STATUS_TOURN_TITLE "Tournament Match",
BNET_STATUS_TOURN_LABEL "You match begins in:",
BNET_STD_DOWNLOADING "Downloading config data...",
BNET_STD_UPDATEFAILED "Failed to retrieve data.",
BNET_STD_GAME_TYPE "Select the Game Type:",
BNET_STD_GAME_TYPE_TOURN "Tournament Type:",
BNET_STD_MAP_LIST "Game Type Map List:",
BNET_STD_MAP_LIST_DESC "Customize your map preferences in the map list below for the selected game type. Maps you do not wish to play may be marked 'thumbs down' by clicking the hand icon next to the map name.",
BNET_STD_MAP_LIST_DESC_VETO "You may 'thumbs down' |Cfffed312%d|R maps for this game type.",
BNET_STD_MAP_LIST_DESC_VETO_ONE "You may 'thumbs down' |Cfffed3121|R map for this game type.",
BNET_STD_MAP_LIST_DESC_TOURN "Tournament games of this type will be played on a randomly selected map from the list below.",
BNET_STD_RACE "Select your Race:",
BNET_STD_TITLE "Battle.net Standard Game",
BNET_STD_TOURNAMENT_TITLE "Battle.net Tournament Game",
BNET_TEAM_DISBANDED "The team has been disbanded.",
BNET_TEAM_INVITATION_TITLE "Battle.net Teammate Invitation",
BNET_TEAM_INVITATION_TITLE_TOURN "Battle.net Tournament Teammate Invitation",
BNET_TEAM_INVITATION_INFO "To play a Battle.net Arranged Team game, you must invite those players with whom you wish to form a team. Listed below is the set of potential teammates you may select from. Choose your teammates and click the 'Invite' button to invite them to your team.",
BNET_TEAM_INVITATION_INFO_TOURN "To play a Battle.net Tournament Team game, you must invite those players with whom you wish to form a team. Once you have played a game in a team tournament, you must use the same team for the duration of that tournament. You will not be allowed to create a new team.",
BNET_TEAM_INVITATION_INFO2 "A user will show up as a potential teammate below if they are a mutual friend of yours, or they are in a private chat channel with you.",
BNET_TEAM_INVITATION_REFRESH "Refresh Potential Teammates",
BNET_TEAM_WAITING "|Cff888888Waiting for teammate to join...",
BNET_TEAM_PLAYERLEFT "|Cfffed312%s|R has left the team.",
BNET_TOURNAMENT_PLAY_GAME "Play Game",
BNET_TOURNAMENT_TITLE_UPCOMING "Upcoming Tournament",
BNET_TOURNAMENT_TITLE_ENTRY "New Tournament Available!",
BNET_TOURNAMENT_TITLE_PRELIM "Preliminary Round In Progress",
BNET_TOURNAMENT_TITLE_PRELIMEND "Preliminary Round Closed",
BNET_TOURNAMENT_TITLE_NOFINALS "Preliminary Rounds Complete",
BNET_TOURNAMENT_TITLE_FINALLOST "Finals Round Elimination",
BNET_TOURNAMENT_TITLE_FINALWON "Tournament Champion!",
BNET_TOURNAMENT_TITLE_FINALSROUND "Finals Round In Progress",
BNET_TOURNAMENT_TITLE_FINALWAITING "Finals Round",
BNET_TOURNAMENT_TITLE_INFO_ENTRY "Format: |Cffffffff%s|R",
BNET_TOURNAMENT_TITLE_INFO_PRELIM "Current Record: |Cffffffff%d-%d-%d|R",
BNET_TOURNAMENT_TITLE_INFO_NOFINALS "Record: |Cffffffff%d-%d-%d|R",
BNET_TOURNAMENT_TITLE_INFO_FINALLOST "Round: |Cffffffff%d of %d|R",
BNET_TOURNAMENT_TITLE_INFO_FINALWON "Format: |Cffffffff%s|R",
BNET_TOURNAMENT_TITLE_INFO_FINALSROUND "Format: |Cffffffff%s|R",
BNET_TOURNAMENT_SINFO1_UPCOMING "Format: |Cffffffff%s|R",
BNET_TOURNAMENT_SINFO1_PRELIMEND "Concluding games in progress.",
BNET_TOURNAMENT_SINFO1_NOFINALS "|CffffffffYou did not advance to the finals.",
BNET_TOURNAMENT_SINFO1_FINALS "|CffffffffYou have advanced to the finals!",
BNET_TOURNAMENT_SINFO1_FINALLOST "|CffffffffYou have been eliminated from the tournament.",
BNET_TOURNAMENT_SINFO1_FINALWON "|CffffffffCongratulations,",
BNET_TOURNAMENT_SINFO1_FINALSROUND "Round: |Cffffffff%d of %d|R",
BNET_TOURNAMENT_SINFO2_UPCOMING "Time: |Cffffffff%s|R",
BNET_TOURNAMENT_SINFO2_PRELIMEND "Finals round starts at: |Cffffffff%s|R",
BNET_TOURNAMENT_SINFO2_FINALS "Finals begin at: |Cffffffff%s|R",
BNET_TOURNAMENT_SINFO2_FINALWON "|CffffffffYou are the champion of the tournament!",
BNET_TOURNAMENT_SINFO2_FINALSROUND "Match begins at: |Cffffffff%s|R",
BNET_TOURNAMENT_SINFO2_FINALWAITING "Waiting for players...",
BNET_TOURNAMENT_SPONSOR "Sponsored By:",
BNET_TOURNAMENT_CLOCK_ENTRY "|Cfffed312Signups close at:|R %s",
BNET_TOURNAMENT_CLOCK_PRELIM "|Cfffed312Preliminary round closes at:|R %s",
BNET_TOURNAMENT_WARNING "You are currently entered in a tournament which is in the finals round.|N|NThe action you have selected would put you in a state where you would not be able to receive scheduled game notifications. If you continue and the scheduled game notification arrives while in this state, you will forfeit that game.|N|NDo you wish to continue?",
BNET_INVITE_RESPONSE_INVALID "|Cfffed312%s|R is not a valid teammate choice.",
BNET_INVITE_RESPONSE_UNABLE "|Cfffed312%s|R was unable to receive your invitation. |N|NTo receive a team invitation, the player must be in the Battle.net chatroom. |N|NPlayers also cannot receive invitations while they are searching for games.",
BNET_INVITE_RESPONSE_DECLINE "|Cfffed312%s|R has declined your invitation.",
BNET_INVITE_RESPONSE_JOINFAILED "|Cfffed312%s|R accepted your invitation, but was unable to join your team.|N|NThis could have occured because your computer is configured to block incoming connections on the game port. Please ensure that any firewall software you are running allows incoming connections on port %u.|N|NOtherwise, it is possible the person you invited was unable to send the invite response due to their own firewall configuration.",
BNET_INVITEE_TITLE "Team Invitation",
BNET_CHAT_INVITE_MESSAGE "|Cfffed312%s|Cff7382C8 has invited you to join a team game. Use the invite panel on the right to accept or decline.|R",
BNET_CLAN_INVITE_MESSAGE "|Cfffed312%s|Cff7382C8 has invited you to join a clan. Use the invite panel on the right to accept or decline.|R",
BNET_INVITEE_FORMAT_STR "|CFFFFFFFF%s|R has invited you to join a team.",
BNET_INVITEE_INFO "If you wish to join this team, click |CFFFFFFFFAccept|R to go to the team chatroom.|n|nOtherwise, click |CFFFFFFFFDecline|R to dismiss this invitation.",
BNET_INVITEE_TIMOUT "Invitation will auto-decline in:",
BNET_REALM_SELECT "Battle.net® Gateway Selection",
BNET_REALM_SELECT_TIP "Battle.net Gateway Selection|n|nThis menu allows you to set the gateway you use to connect to Battle.net.",
BNET_REALM_SELECT_TIP_GATEWAY "Battle.net Gateway Selection|n|nThis menu allows you to set the gateway you use to connect to Battle.net.|n|nCurrent Gateway: %s",
BNET_REALM_MESSAGE "If the selected Gateway does not best represent your current location, select the correct Gateway for the best possible connection. Choosing a Gateway WILL limit your ability to play or chat with players in other regions.",
BNET_WELCOME "Welcome to Battle.net",
BNET_PASSWORD_RECOVERY_TIP "Password |Cfffed312R|Recovery|n|nIf you have forgotten your password and you registered your email address with us for this account, you can request that a new password be sent to you through email by clicking this button.",
BNET_PASSWORD_RECOVERY_SHORTCUT "R",
BNET_PLAYER_INVITE_FAILED "Unable to invite %s",
BNET_PLAYER_JOINED_TEAM "%s has joined",
BNET_PLAYER_TEAM_INVITE_DECLINED "%s has rejected the team invitation",
BNET_PLAYER_TEAM_INVITE_SENT "Invited %s",
BNET_PLAYER_TEAM_KICKED "%s has been kicked from this team.",
BNET_TEAM_DISCONNECTED_KICKED "You have been kicked from a team",
BRIGHT "Bright",
CANCEL "Cancel",
CHANGE_EMAIL_ADDRESS "Change Email Address",
CHANGE_EMAIL_INFO "If you registered an email address for this account then you can change it here. Note that both email addresses need to be active for you to make this change.",
CHANNEL "Channel",
CHAT_COMMAND_NOT_FOUND "Command not recognized",
CHAT_EMOTE_HELP "Format: /emote [text]",
CHAT_WHISPER_ERROR "Unable to whisper player. Error: %d",
CHANNEL_INVALID_NAME "Invalid channel name.",
CHANNEL_JOIN_HELP "Format: /join [channel_name]",
CHANNEL_MAXIMIUM_WARNING "You are in the maximum number of channels. Please leave one before joining another.",
CHANNEL_NAME "Channel Name",
CHANNEL_NOT_FOUND "Could not find channel.",
CHANNEL_UNKNOWN "Received update on unknown channel",
CHAT "Chat",
CHAT_ACTION_WHISPER "Whisper",
CHAT_ACTION_SQUELCH "Squelch",
CHAT_ACTION_UNSQUELCH "Unsquelch",
CHAT_ACTION_PROFILE "Profile...",
CHAT_ACTION_WEBPROFILE "Web Profile...",
CHAT_ACTION_WHOIS "Whois",
CHAT_ACTION_FRIEND_ADD "Add to friends",
CHAT_ACTION_FRIEND_REMOVE "Remove from friends",
CHAT_ACTION_FRIEND_PROMOTE "Promote friend",
CHAT_ACTION_FRIEND_DEMOTE "Demote friend",
CHAT_ACTION_KICK "Kick",
CHAT_ACTION_BAN "Ban",
CHAT_ACTION_DESIGNATE "Designate",
CHAT_ACTION_CLAN_ADD "Invite to clan",
CHAT_ACTION_CLAN_REMOVE "Remove from clan",
CHAT_ACTION_CLAN_PROMOTE_OFFICER "Promote to Shaman",
CHAT_ACTION_CLAN_PROMOTE_MEMBER "Promote to Grunt",
CHAT_ACTION_CLAN_DEMOTE_MEMBER "Demote to Grunt",
CHAT_ACTION_CLAN_DEMOTE_SUSPENDED "Demote to Peon",
CHAT_ACTION_CLAN_TRANSFER_OWNERSHIP "Transfer ownership to",
CHAT_ACTION_CLAN_LEAVE "Leave clan",
CHAT_RECIPIENT_ALL "[All]",
CHAT_RECIPIENT_ALLIES "[Allies]",
CHAT_RECIPIENT_OBSERVERS "[Observers]",
CHAT_RECIPIENT_REFEREES "[Referees]",
CHAT_RECIPIENT_PRIVATE "[Private]",
CHAT_HISTORY "Chat History",
CHAT_INFO_TEXT "You can silence messages from other players by typing /squelch followed by the player's name into the chat edit box. (i.e. /squelch Arthas)",
CHAT_SUPPORT_INFO "The Chat Support option allows you to read and write chat text in the language specified. Note that changing this value from the default will use more memory than normally required by the game.",
CHEATENABLED "Cheat enabled!",
CHEATDISABLED "Cheat disabled!",
CHECKPOINT_REACHED "Checkpoint Reached",
CLAN "Clan",
CLAN_RULES_LABEL "Complete information about Clan Rules and Commands is available here:",
CLAN_DISBAND_LABEL "Clan Chieftains may completely disband the clan here:",
CLAN_DISBAND "Disband Clan",
CLAN_CREATE_TEXT1 "To create a clan, Battle.net will need the following information:",
CLAN_INFO_TEXT1 "You are currently not a member of any Warcraft III clan.",
CLAN_INFO_TEXT2 "Warcraft III clans are groups of players who wish to affiliate together led by a Chieftain. Battle.net provides clans with their own private channels, profiles, as well as a ladder to rate the overall play of the clan. Each clan has a name and a unique clan abbreviation.",
CLAN_INFO_TEXT3 "Additional information about clans is available here:",
CLAN_INFO_TEXT4 "To create your own clan, click on the '|CFFFFFFFFCreate Clan|R' button below to begin the process:",
CLAN_LADDER "Clan Ladder Info|n|nOpens the Clan Ladder ranking webpage for this clan.",
CLAN_MANAGEMENT "Clan Management",
CLAN_MANAGEMENT_DOWNLOAD "Retrieving clan data...",
CLAN_MEMBER_INVITE "%s has been invited to join your clan.",
CLAN_PROFILE "Clan Profile|n|nOpens the Clan Profile webpage for this clan.",
CLAN_RANK_0 "Peon",
CLAN_RANK_1 "Peon",
CLAN_RANK_2 "Grunt",
CLAN_RANK_3 "Shaman",
CLAN_RANK_4 "Chieftain",
CLOSED "Closed",
COLON_ACCOUNT_NAME "Account Name:",
COLON_ADDITIONAL_INFORMATION "Additional Information:",
COLON_ADV_SHARED_CONTROL "Full Shared Unit Control:",
COLON_ANIM_QUALITY "Animation Quality:",
COLON_ARMOR "Armor:",
COLON_ARRANGED_TEAM_HISTORY "Arranged Team History:",
COLON_AUTHOR "Author:",
COLON_AVAILABLE_GAMES "Available Games:",
COLON_AVAILABLE_CHANNELS "Available Channels:",
COLON_CHANNEL_NAME "Channel Name:",
COLON_CHAT_SUPPORT "Chat Support:",
COLON_CHOOSE_ICON "Choose Your Icon:",
COLON_CHOOSE_YOUR_RACE "Choose Your Race:",
COLON_CLAN "Clan:",
COLON_CLAN_CHANNEL_STATUS "Clan Channel Status:",
COLON_CLAN_MANAGEMENT "Clan Management:",
COLON_CLAN_MOTD "Clan Message of the Day:",
COLON_CLAN_NAME "Clan Name:",
COLON_CLAN_RANK "Clan Rank:",
COLON_CLAN_JOINED "Member Since:",
COLON_CLAN_TAG "Clan Abbreviation (4 Characters Max):",
COLON_COLOR "Color:",
COLON_COMPLETED "Completed: ",
COLON_CURRENT_ICON "Current Icon:",
COLON_CURRENT_PASSWORD "Current Password:",
COLON_CUSTOM_KEYS "Custom Keyboard Shortcuts:",
COLON_DESCRIPTION "Description:",
COLON_DIFFICULTY "Difficulty:",
COLON_ELAPSED_TIME "Elapsed Time:",
COLON_EMAIL "Email:",
COLON_GAMEPORT "Game Port:",
COLON_GAMES "Games:",
COLON_GAME_CREATION_TIME "Game Creation Time:",
COLON_GAME_CREATOR "Game Creator:",
COLON_GAME_LIST "Game List:",
COLON_GAME_NAME "Game Name:",
COLON_GAME_SPEED "Game Speed:",
COLON_GAME_TEMPLATE "Game Template:",
COLON_GAME_TIME "Game Time:",
COLON_GAME_TYPE "Game Type:",
COLON_GAMMA "Gamma:",
COLON_FIXED_ASPECT_RATIO "Fixed Aspect Ratio:",
COLON_HANDICAP "Handicap:",
COLON_HANDICAPS "Handicaps:",
COLON_HERO_ATTRIBUTES "Hero Attributes:",
COLON_HOMEPAGE "Homepage:",
COLON_HOST "Host:",
COLON_HUMAN "Human:",
COLON_HUMAN_CAMPAIGN "Human Campaign:",
COLON_KEYBOARD_SCROLL "Keyboard Scroll:",
COLON_LADDER_INFO "Ladder Info:",
COLON_LEVEL "Level:",
COLON_LEVEL_FORMAT "Level: |CFFFFFFFF%d|R",
COLON_LUMBER_INCOME_RATE "Lumber Income Rate:",
COLON_LIGHTS "Lights:",
COLON_LOCK_TEAMS "Lock Teams:",
COLON_LOSSES "Losses:",
COLON_LUMBER "Lumber:",
COLON_MAP_AUTHOR "Author:",
COLON_MAP_CREATOR "Map Creator:",
COLON_MAP_DESC "Map Description:",
COLON_MAP_NAME "Map Name:",
COLON_MAP_PREFERENCES "Map Preferences:",
COLON_MAP_RESOURCES "Map Resources:",
COLON_MAP_SELECTION "Map Selection:",
COLON_MAP_SIZE "Map Size:",
COLON_MAP_TYPE "Map Type:",
COLON_MAX_PLAYERS "Max Players:",
COLON_MESSAGE_ALL "To All:",
COLON_MESSAGE_ALLIES "To Allies:",
COLON_MESSAGE_OBSERVERS "To Observers:",
COLON_MESSAGE_PLAYER "To %s:",
COLON_MESSAGE_REFEREES "To Referees:",
COLON_MESSAGE_SINGLEPLAYER "Message:",
COLON_MODEL_DETAIL "Model Detail:",
COLON_MOUSE_SCROLL "Mouse Scroll:",
COLON_MUSIC_VOLUME "Music Volume:",
COLON_NAME "Name:",
COLON_NEW_EMAIL "New Email:",
COLON_NEW_PASSWORD "New Password:",
COLON_NIGHT_ELF "Night Elf:",
COLON_NIGHT_ELF_CAMPAIGN "Night Elf Campaign:",
COLON_NUMBER_OF_PLAYERS "Number of Players:",
COLON_NUMBER_OF_MISSIONS "Number of Missions:",
COLON_NUM_VETOES "Map Vetoes:",
COLON_OBSERVERS "Observers:",
COLON_OCCLUSION "Occlusion:",
COLON_OLD_EMAIL "Old Email:",
COLON_ORC "Orc:",
COLON_ORC_CAMPAIGN "Orc Campaign:",
COLON_PARTICLES "Particles:",
COLON_PARTNER "Partner:",
COLON_PARTNERS "Partners:",
COLON_PASSWORD "Password:",
COLON_PLAY_HISTORY "Play History:",
COLON_PLAYERS "Players:",
COLON_PORTRAIT "Portrait:",
COLON_POTENTIAL_TEAMMATES "Potential Teammates:",
COLON_POTENTIAL_CLANMATES "Potential Clanmates:",
COLON_RACE "Race:",
COLON_RANDOM "Random:",
COLON_RANDOM_HERO "Random Hero:",
COLON_RANDOM_RACES "Random Races:",
COLON_RANK "Rank:",
COLON_REALM_SELECTION "Gateway Selection:",
COLON_REGION "Region:",
COLON_REPEAT_EMAIL "Repeat Email:",
COLON_REPEAT_NEW_EMAIL "Repeat New Email:",
COLON_REPEAT_NEW_PASSWORD "Repeat New Password:",
COLON_REPEAT_PASSWORD "Repeat Password:",
COLON_REFEREES "Referees:",
COLON_RESOLUTION "Resolution:",
COLON_SELECT_MAP "Select Map:",
COLON_SELECTED_GUIDELINES "Selected Guidelines:",
COLON_SELECTED_REALM "Selected Gateway:",
COLON_SEND_TO_PLAYER "Send to Player:",
COLON_SHADOWS "Unit Shadows:",
COLON_SOUND_EFFECTS_VOLUME "Sound Effects Volume:",
COLON_SOUND_PROVIDER "Sound Provider:",
COLON_SPELL_FILTER "Spell Detail:",
COLON_STARTING_RESOURCES "Starting Resources:",
COLON_SUGGESTED_PLAYERS "Suggested Players:",
COLON_TEAM "Team:",
COLON_TEAMS "Teams:",
COLON_TEAMS_TOGETHER "Teams Together:",
COLON_TEAM_MEMBER "Team Member:",
COLON_TEAM_MEMBERS "Team Members:",
COLON_TEMPLATE "Template:",
COLON_TEMPLATE_TYPE "Template Type:",
COLON_TEXTURE_QUALITY "Texture Quality:",
COLON_TILESET "Tileset:",
COLON_TOTAL "Total:",
COLON_TOURNAMENT "Tournament:",
COLON_TOURNAMENT_FORMAT "Tournament Format:",
COLON_TUTORIAL "Prologue:",
COLON_UNDEAD "Undead:",
COLON_UNDEAD_CAMPAIGN "Undead Campaign:",
COLON_VISIBILITY "Visibility:",
COLON_WINS "Wins:",
COLON_WIN_PERCENTAGE "Win %:",
COLON_YOUR_OPPONENTS "Your Opponents:",
COLON_YOUR_OPPONENT "Your Opponent:",
COLON_YOUR_TEAM "Your Team:",
COMPUTER "Computer",
COMPUTER_INSANE "Computer (Insane)",
COMPUTER_NEWBIE "Computer (Easy)",
COMPUTER_NORMAL "Computer (Normal)",
CONFIRM_EXIT "Confirm Exit",
CONFIRM_EXIT_MESSAGE "Are you sure you want to exit?",
CONSTRUCTING "Constructing",
CONTINUE_PLAYING "Continue playing",
COOLDOWNSTOCKTOOLTIP "Coming soon",
CORRUPT_MAP "Corrupt Map",
CUSTOM_TILESET "(Custom)",
CREATE_GAME_SETTINGS "Create Game Settings",
CREATE "Create",
CREATE_CLAN "Create Clan",
CRIPPLE_TIMER_HUMAN "Build Town Hall",
CRIPPLE_TIMER_ORC "Build Great Hall",
CRIPPLE_TIMER_NIGHTELF "Build Tree of Life",
CRIPPLE_TIMER_UNDEAD "Build Necropolis",
CRIPPLE_WARNING_HUMAN "|cffffcc00You will be revealed to your opponents unless you build a Town Hall.|r",
CRIPPLE_WARNING_ORC "|cffffcc00You will be revealed to your opponents unless you build a Great Hall.|r",
CRIPPLE_WARNING_NIGHTELF "|cffffcc00You will be revealed to your opponents unless you build a Tree of Life.|r",
CRIPPLE_WARNING_UNDEAD "|cffffcc00You will be revealed to your opponents unless you build a Necropolis.|r",
CRIPPLE_UNREVEALED "|cffffcc00You are no longer revealed to your opponents.|r",
CRIPPLE_UNCRIPPLED "|cffffcc00You are no longer in danger of being revealed to your opponents.|r",
CRIPPLE_REVEALING_PREFIX "|cffffcc00Revealing ",
CRIPPLE_REVEALING_POSTFIX ".|r",
CRITERIA_CHAPTER "Complete %s",
CRITERIA_CHAPTER_HARD "Complete %s on Hard",
CRITERIA_MAP "Complete %s",
CRITERIA_MAP_HARD "Complete %s on Hard",
CRITERIA_MELEE "%s Matchmaking Wins",
CRITERIA_MELEE_IN_IGR "Matchmaking Wins in an IGR",
CUSTOM_FILTER_TITLE "Battle.net Custom Game Filter",
CUSTOM_FILTER_INFO "Changing the settings below will instruct Battle.net to only add custom games to your list which match your filter settings.",
CUSTOM_CAMPAIGN "Campaigns",
CUSTOM_MAP_ERROR "Map Preview Unavailable",
CUSTOM_MAP_ERROR_JOIN "Join this game to download the map",
CUSTOM_KEYS "Custom Keyboard Shortcuts",
CUSTOM_KEYS_INFO "Clear this option if you just want to use default hotkey commands. Set this option to use custom hotkey and tip data from the file CustomKeys.txt.",
DEAD "Dead",
DECLINE "Decline",
DARK "Dark",
DASH_DASH "--",
DAYTIME_REVEALS_MAP "Daytime Reveals Map",
DEFAULT "Default",
DEFAULTTIMERDIALOGTEXT "Remaining",
DEFAULT_ICON_SELECTED "Default Selected",
DELETE "Delete",
DELETE_MESSAGE "Are you sure you want to delete the saved game '%s'?",
DELETE_PROFILE_MESSAGE "Are you sure you want to delete the single-player profile '%s'?",
DELETE_REPLAY_MESSAGE "Are you sure you want to delete the replay '%s'?",
DELETE_SAVED_GAME "Delete Saved Game",
DIFFICULTY_TEXT "This setting allows you to play the campaign at a difficulty appropriate to your skill level.",
DISALLOWED "Disallowed",
DISCONNECT "Disconnect",
DISCONNECTED "You've been disconnected from Battle.net",
DISCONNECTED_LOGIN "Login",
DISCONNECTED_PLAY_OFFLINE "Play Offline",
DROP_PLAYERS "Drop players",
UPDATE_REQUIRED "A new update is available for download. Please download it now.|n|n'%s'",
UPDATE_FAILED "Update Failed",
UPDATE_REQUIRED_LABEL "Update Required",
DOWNLOAD_UPDATE "Download Update",
DOWNLOAD_SUCCESSFUL "Download Successful",
DOWNLOADING_UPDATE "Downloading Update",
DOWNLOADING_MAP "Downloading Map",
EASY "Story",
EIGHT_TO_TWELVE_PLAYERS "8 to 12 Players",
ELAPSED_TIME "Elapsed Time:",
EMAIL_BIND "Email Registration",
EMAIL_BIND_INFO1 "You now have the option of entering a valid email address to be used for account maintenance purposes.|N|NEntering your email address will enable extra features, such as the ability to recover your account should you forget your password. Visit www.battle.net/email-address for more information.",
EMAIL_BIND_INFO2 "Entering an email address is completely optional; however, this will be the only time you will be given the opportunity to register an email address with this account.|N|NIf you do not register your email address at this time, you will NOT have another opportunity to do so at a later time.",
EMPTY_STRING " ",
ENABLE_MULTIBUTTON_MOUSE "Enable Multi-Button Mouse Support",
END_GAME "End Game",
END_GAME_OPTIONS "End Game Options",
ENHANCED_TOOLTIPS "Enhanced Tooltips",
ENTER "Enter",
ENTIRE_MAP_REVEALED "Entire Map Revealed",
ENVIRONMENTAL_EFFECTS "Environmental Effects",
ETERNITYS_END "Eternity's End",
EXTRA_HIGH_LATENCY "Extra High Latency",
FAST "Fast",
FAST_SCROLL "Fast",
FASTEST "Fastest",
FILEPROGRESS_UNKNOWN "?",
FILEPROGRESS_ERROR "|Cffff0000!",
FOG_OF_WAR "Fog of War",
FOG_OF_WAR_OFF "Fog of War Off",
FORFEIT "Forfeit",
FORMATION_TOGGLE "Enable Formation Movement toggle",
FORMATION_TOGGLE_INFO "This option will enable the use of the ALT key to toggle the current state of the formation movement preference. If this option is turned off, then holding down ALT while issuing a move or attack order will not toggle the formation movement preference.",
FORMATION_TOOLTIP "Toggle Formation Movement (|Cfffed312Alt-F|R)",
FORMATION_TOOLTIP_UBER "This option will toggle the use of formation based movement.|N|NWhen this feature is on, units moved in a group selection will try to maintain a logical formation such as having melee units in front and ranged units in the rear.|N|NTo keep the units as a group, all of the selected units will slow down to the speed of the slowest unit in the selection.",
FOUR_TEAM_PLAY "Four Team Play",
FOUR_TO_EIGHT_PLAYERS "4 to 8 Players",
FREE_FOR_ALL "Free For All",
FRIENDS "Friends",
FULL "Full",
FULL_OBSERVERS "Full Observers",
GAME_SAVED "Game Saved",
GAME_SETTINGS "Game Settings",
GAMENAME "Local Game (%s)",
GAMEPORT_INFO "The game port sets which network port other players will attempt to connect to your computer on. This value should be in the range of 1024 - 49151. In most cases this value will not need to be modified.",
GAMELIST_OBSERVERS " (observers)",
GAMELIST_REFEREES " (referees)",
GAMEOVER_CONTINUE_GAME "|CFFFFFFFFC|Rontinue Game",
GAMEOVER_CONTINUE_OBSERVING "Continue |CFFFFFFFFO|Rbserving",
GAMEOVER_DEFEAT "You have failed to achieve victory.",
GAMEOVER_DEFEAT_MSG "You failed to achieve victory.",
GAMEOVER_DISCONNECTED "You were disconnected.",
GAMEOVER_GAME_OVER "Game over.",
GAMEOVER_LOAD "|CFFFFFFFFL|Road Game",
GAMEOVER_NEUTRAL "Game over.",
GAMEOVER_OK "|CFFFFFFFFO|RK",
GAMEOVER_CONTINUE "|CFFFFFFFFC|Rontinue",
GAMEOVER_QUIT_GAME "|CFFFFFFFFQ|Ruit Game",
GAMEOVER_QUIT_MISSION "|CFFFFFFFFQ|Ruit Campaign",
GAMEOVER_REDUCE_DIFFICULTY "Reduce |CFFFFFFFFD|Rifficulty",
GAMEOVER_RESTART "|CFFFFFFFFR|Restart",
GAMEOVER_TIE "You tied. Do you wish to continue playing?",
GAMEOVER_VICTORY "You are victorious. Do you wish to continue playing?",
GAMEOVER_VICTORY_MSG "Victory!",
GAMEPLAY "Gameplay",
GAMEPLAY_MOUSE_SCROLL_DISABLE "Disable Mouse Scroll",
GAMEPLAY_OPTIONS "Gameplay Options",
GENERAL "General",
GENERAL_OPTIONS "General Options",
GOLD "Gold",
HANDICAP_TIP "Units for this player will have their maximum hit points adjusted to this percentage.",
HARD "Hard",
HEALTH_BARS "Always show Status Bars",
HEALTH_BARS_INFO "This option will always show unit and building status bars. While this option is enabled, holding down the ALT key will temporarily hide these status bars.",
COLORED_HEALTH_BARS_INFO "When enabled, displays a unit's life bar using the color of the player controlling it.",
DAMAGED_HEALTH_BARS_INFO "When enabled status bars will automatically show when units and structures are below maximum health or mana.",
HERO_FRAMES_INFO "This option makes hero units display a special background with their status bars.",
HERO_LEVEL_INFO "When enabled heroes will display their current level on their status bar.",
HERO_XP_TAG "+%d xp",
NUMERIC_COOLDOWN_INFO "Check this to show a number countdown for ability cooldowns.",
HELP "Help",
HELP_BUTTON "?",
HEROES_COLUMN0 "Heroes Used",
HEROES_COLUMN1 "Heroes Killed",
HEROES_COLUMN2 "Items Obtained",
HEROES_COLUMN3 "Mercenaries Hired",
HEROES_COLUMN4 "Experience Gained",
HIDE_TERRAIN "Hide Terrain",
HIGH "High",
HIGH_ANIM "High",
HIGH_LIGHTS "High",
HIGH_MODELS "High",
HIGH_PARTICLES "High",
HIGH_SPELLS "High",
HIGH_TEXTURES "High",
HIGH_VOL "High",
HIGH_LATENCY "High Latency",
HOUR "hour",
HOURS "hours",
HUMAN "Human",
IDLE_PEON "Idle Workers (|Cfffed312F8|R)",
IDLE_PEON_DESC "One or more workers aren't earning their keep.",
IGNORESYNCVALUES "Ignore recorded checksums",
INFOPANEL_LEVEL "Level %u", // "Level 5",
INFOPANEL_LEVEL_CLASS "Level %u %s", // "Level 4 Paladin",
INSANE "Insane",
ITEM_USE_TOOLTIP "|CFFFED312Left-Click to Use|R",
ITEM_NAME_HOTKEY "%s (|cfffed312NumPad %u|r)",
ITEM_NAME_CHARGE "%s (|cfffed312%d|r)",
ITEM_PAWN_TOOLTIP "|cff808080Drop item on shop to sell|R",
KEY_ACCEPT "|CffffffffA|Rccept",
KEY_ACCEPT_SHORTCUT "A",
KEY_ADD "|CffffffffA|Rdd",
KEY_ADD_SHORTCUT "A",
KEY_ADVANCED_OPTIONS "Advanced |CffffffffO|Rptions",
KEY_ADVANCED_OPTIONS_SHORTCUT "O",
KEY_AGREE "A|Cffffffffg|Rree",
KEY_AGREE_SHORTCUT "g",
KEY_ALLIES "Codex (|Cfffed312F11|R)",
KEY_BATTLE_NET "|CffffffffB|Rattle.net",
KEY_BATTLE_NET_SHORTCUT "B",
KEY_BACK "|CffffffffB|Rack",
KEY_BACK_SHORTCUT "B",
KEY_BACK_ARROW "|CffffffffB|Rack",
KEY_BACK_ARROW_SHORTCUT "B",
KEY_BROWSER "Launch B|Cffffffffr|Rowser",
KEY_BROWSER_SHORTCUT "r",
KEY_CAMPAIGN "|CffffffffC|Rampaign",
KEY_CAMPAIGN_SHORTCUT "C",
KEY_CANCEL "C|Cffffffffa|Rncel",
KEY_CANCEL_SHORTCUT "a",
KEY_CHANGE_EMAIL "Change |CffffffffE|Rmail",
KEY_CHANGE_EMAIL_SHORTCUT "E",
KEY_CHANGE_PASSWORD "Change |CffffffffP|Rassword",
KEY_CHANGE_PASSWORD_SHORTCUT "P",
KEY_CHANNEL "C|Cffffffffh|Rannel",
KEY_CHANNEL_SHORTCUT "h",
KEY_CHANNEL_TAB "Chann|Cffffffffe|Rl",
KEY_CHANNEL_TAB_SHORTCUT "e",
KEY_CHAT "Chat (|Cfffed312F12|R)",
KEY_CINEMATICS "|CffffffffC|Rinematics",
KEY_CINEMATICS_SHORTCUT "C",
KEY_CLAN_TAB "|CffffffffC|Rlan",
KEY_CLAN_TAB_SHORTCUT "C",
KEY_COLON_NAME "|CffffffffN|Rame:",
KEY_COLON_NAME_SHORTCUT "N",
KEY_COLON_PASSWORD "|CffffffffP|Rassword:",
KEY_COLON_PASSWORD_SHORTCUT "P",
KEY_COLON_TEAM "T|Cffffffffe|Ram:",
KEY_COLON_TEAM_SHORTCUT "e",
KEY_CREATE_GAME "|CffffffffC|Rreate Game",
KEY_CREATE_GAME_SHORTCUT "C",
KEY_CREATE_NEW_ACCOUNT "|CffffffffC|Rreate New Account",
KEY_CREATE_NEW_ACCOUNT_SHORTCUT "C",
KEY_CREDITS "|CffffffffC|Rredits",
KEY_CREDITS_SHORTCUT "C",
KEY_CUSTOM_CAMPAIGN "C|Cffffffffu|Rstom Campaign",
KEY_CUSTOM_CAMPAIGN_SHORTCUT "u",
KEY_CUSTOM_GAME "Custom Games",
KEY_CUSTOM_GAME_SHORTCUT "G",
KEY_DEBUG "D|Cffffffffe|Rbug",
KEY_DEBUG_SHORTCUT "e",
KEY_DECLINE "|CffffffffD|Recline",
KEY_DECLINE_SHORTCUT "D",
KEY_DEFAULT_ICON "|CffffffffD|Refault Icon",
KEY_DEFAULT_ICON_SHORTCUT "D",
KEY_DELETE "|CffffffffD|Relete",
KEY_DELETE_SHORTCUT "D",
KEY_DISAGREE "|CffffffffD|Risagree",
KEY_DISAGREE_SHORTCUT "D",
KEY_EDIT_GAME_FILTERS "|CffffffffE|Rdit Game Filters...",
KEY_EDIT_GAME_FILTERS_SHORTCUT "E",
KEY_END_GAME "|CffffffffE|Rnd Game",
KEY_END_GAME_SHORTCUT "E",
KEY_ENTER_CHAT "Enter |CffffffffC|Rhat",
KEY_ENTER_CHAT_SHORTCUT "C",
KEY_EXIT "E|Cffffffffx|Rit",
KEY_EXIT_SHORTCUT "x",
KEY_EXIT_BNET "E|Cffffffffx|Rit Battle.net",
KEY_EXIT_BNET_SHORTCUT "x",
KEY_EXIT_PROGRAM "E|Cffffffffx|Rit Game",
KEY_EXIT_PROGRAM_SHORTCUT "x",
KEY_FILTER "|CffffffffF|Rilter",
KEY_FILTER_SHORTCUT "F",
KEY_FORFEIT "|CffffffffF|Rorfeit",
KEY_FORFEIT_SHORTCUT "F",
KEY_FRIENDS_TAB "|CffffffffF|Rriends",
KEY_FRIENDS_TAB_SHORTCUT "F",
KEY_GAME_SETTINGS "Game |CffffffffS|Rettings",
KEY_GAME_SETTINGS_SHORTCUT "S",
KEY_GAMEPLAY "|CffffffffG|Rameplay",
KEY_GAMEPLAY_SHORTCUT "G",
KEY_HELP "|CffffffffH|Relp",
KEY_HELP_SHORTCUT "H",
KEY_INPUT "|CffffffffI|Rnput",
KEY_INPUT_SHORTCUT "I",
KEY_INVITE "|CffffffffI|Rnvite",
KEY_INVITE_SHORTCUT "I",
KEY_JOIN_CHANNEL "|CffffffffJ|Roin Channel",
KEY_JOIN_CHANNEL_SHORTCUT "J",
KEY_JOIN_GAME "|CffffffffJ|Roin Game",
KEY_JOIN_GAME_SHORTCUT "J",
KEY_LADDERS "|CffffffffL|Radders",
KEY_LADDERS_SHORTCUT "L",
KEY_LOAD "|CffffffffL|Road",
KEY_LOAD_SHORTCUT "L",
KEY_LOAD_GAME "|CffffffffL|Road Game",
KEY_LOAD_GAME_SHORTCUT "L",
KEY_LOAD_SAVED_GAME "|CffffffffL|Road Saved Game",
KEY_LOAD_SAVED_GAME_SHORTCUT "L",
KEY_LOCAL_AREA_NETWORK "|CffffffffL|Rocal Area Network",
KEY_LOCAL_AREA_NETWORK_SHORTCUT "L",
KEY_LOG "Log (|Cfffed312F12|R)",
KEY_LOGON "|CffffffffL|Rogon",
KEY_LOGON_SHORTCUT "L",
KEY_MAP_INFO "|CffffffffM|Rap Info",
KEY_MAP_INFO_SHORTCUT "M",
KEY_MAP_SELECTION "|CffffffffM|Rap Selection",
KEY_MAP_SELECTION_SHORTCUT "M",
KEY_MENU "Menu (|Cfffed312F10|R)",
KEY_MULTIPLAYER "|CffffffffM|Rultiplayer",
KEY_MULTIPLAYER_SHORTCUT "M",
KEY_NETWORK "|CffffffffN|Retwork",
KEY_NETWORK_SHORTCUT "N",
KEY_NEXT_ARROW "|CffffffffN|Rext",
KEY_NEXT_ARROW_SHORTCUT "N",
KEY_OK "|CffffffffO|RK",
KEY_OK_SHORTCUT "O",
KEY_OPTIONS "|CffffffffO|Rptions",
KEY_OPTIONS_SHORTCUT "O",
KEY_OVERWRITE "|CffffffffO|Rverwrite",
KEY_OVERWRITE_SHORTCUT "O",
KEY_PAUSE_GAME "Pause Ga|Cffffffffm|Re",
KEY_PAUSE_GAME_SHORTCUT "m",
KEY_PLAY_CAMPAIGN "|CffffffffP|Rlay Campaign",
KEY_PLAY_CAMPAIGN_SHORTCUT "P",
KEY_PLAY_GAME "|CffffffffP|Rlay Game",
KEY_PLAY_GAME_SHORTCUT "P",
KEY_PREVIOUS_MENU "|CffffffffP|Rrevious Menu",
KEY_PREVIOUS_MENU_SHORTCUT "P",
KEY_QUIT "|CffffffffQ|Ruit",
KEY_QUIT_SHORTCUT "Q",
KEY_QUIT_MISSION "|CffffffffQ|Ruit Mission",
KEY_QUIT_MISSION_SHORTCUT "Q",
KEY_QUESTS "Quests (|Cfffed312F9|R)",
KEY_READY "R|Cffffffffe|Rady",
KEY_READY_SHORTCUT "e",
KEY_REPLAY "Repla|Cffffffffy|R",
KEY_REPLAY_SHORTCUT "y",
KEY_RESTART_MISSION "|CffffffffR|Restart Mission",
KEY_RESTART_MISSION_SHORTCUT "R",
KEY_RESUME_GAME "Resume Ga|Cffffffffm|Re",
KEY_RESUME_GAME_SHORTCUT "m",
KEY_RESUME_PLAY "Resume |CffffffffP|Rlay",
KEY_RESUME_PLAY_SHORTCUT "P",
KEY_RETURN_TO_GAME "|CffffffffR|Return to Game",
KEY_RETURN_TO_GAME_SHORTCUT "R",
KEY_SAVE "|CffffffffS|Rave",
KEY_SAVE_SHORTCUT "S",
KEY_SAVE_E "Sav|Cffffffffe|R",
KEY_SAVE_E_SHORTCUT "e",
KEY_SAVE_GAME "|CffffffffS|Rave Game",
KEY_SAVE_GAME_SHORTCUT "S",
KEY_SAVE_REPLAY "|cffffffffS|rave Replay",
KEY_SAVE_REPLAY_SHORTCUT "S",
KEY_SELECT "|CffffffffS|Relect",
KEY_SELECT_SHORTCUT "S",
KEY_SELECT_ICON "|CffffffffS|Relect Icon",
KEY_SELECT_ICON_SHORTCUT "S",
KEY_SINGLE_PLAYER "|CffffffffS|Ringle Player",
KEY_SINGLE_PLAYER_SHORTCUT "S",
KEY_SOUND "|CffffffffS|Round",
KEY_SOUND_SHORTCUT "S",
KEY_STANDARD_GAME "|CffffffffS|Rtandard Game",
KEY_STANDARD_GAME_SHORTCUT "S",
KEY_START_GAME "|CffffffffS|Rtart Game",
KEY_START_GAME_SHORTCUT "S",
KEY_START_REPLAY "|CffffffffS|Rtart Replay",
KEY_START_REPLAY_SHORTCUT "S",
KEY_TCPIP "|CffffffffL|Rocal Area Network",
KEY_TCPIP_SHORTCUT "L",
KEY_TEAM_GAME "|CffffffffT|Ream Game",
KEY_TEAM_GAME_SHORTCUT "T",
KEY_TIPS "|CffffffffT|Rips",
KEY_TIPS_SHORTCUT "T",
KEY_TOURNAMENT_INFO "|CffffffffT|Rournament Information",
KEY_TOURNAMENT_INFO_SHORTCUT "T",
KEY_TOURNAMENT_ENTRY "Enter Tour|Cffffffffn|Rament",
KEY_TOURNAMENT_ENTRY_SHORTCUT "n",
KEY_TOURNAMENT_RESIGN "Leave Tour|Cffffffffn|Rament",
KEY_TOURNAMENT_RESIGN_SHORTCUT "n",
KEY_TOURNAMENTS "T|Cffffffffo|Rurnaments",
KEY_TOURNAMENTS_SHORTCUT "o",
KEY_GENERAL "General",
KEY_VIDEO "|CffffffffV|Rideo",
KEY_VIDEO_SHORTCUT "V",
KEY_VIEW_REPLAY "View |CffffffffR|Replay",
KEY_VIEW_REPLAY_SHORTCUT "R",
KEY_VIEW_TERMS_OF_USE "|CffffffffV|Riew Terms of Use",
KEY_VIEW_TERMS_OF_USE_SHORTCUT "V",
KEY_WANT_EXPANSION_DATA "Use E|Cffffffffx|Rpansion Data",
KEY_WANT_EXPANSION_DATA_SHORTCUT "x",
KEY_WEB_PROFILE "View |CffffffffW|Reb Profile",
KEY_WEB_PROFILE_SHORTCUT "W",
LABEL "Slow",
LAN_GAME_SETUP_TITLE "Local Multiplayer Game Setup",
LAN_GAME_SETUP_INFO "To set up a custom game, click one of the buttons below.",
LARGE "Large",
LAST_GAME_PLAYED "Last Game Played:",
LATENCY_INFO1 "Setting lower latency reduces the time between when you click the mouse and when a unit responds to the click.",
LATENCY_INFO2 "A higher latency setting increases that time, but smoothes network performance for systems with slow or 'lossy' network connections",
LEADERBOARD_HU02_BARRACKS "Barracks Built: ",
LEADERBOARD_HU02_FARMS "Farms Built: ",
LEADERBOARD_HU02_FOOTMEN "Footmen Trained: ",
LEADERBOARD_UD01_ACOLYTE "Acolytes Rescued ",
LEVEL "Level",
LOAD "Load",
LOADING_LOADING "L O A D I N G",
LOADING_PRESS_A_KEY "PRESS ANY KEY TO CONTINUE",
LOADING_WAITING_FOR_PLAYERS "WAITING FOR OTHER PLAYERS",
LOAD_BATTLENET_INFO "Loaded custom games on Battle.net are marked as private. Other players must know the game name you have entered above to join. All players that wish to join this game must have previously been in the original game when it was saved.",
LOAD_GAME "Load Game",
LOAD_MULTIPLAYER_SAVED_GAME "Load Multiplayer Saved Game",
LOAD_SINGLEPLAYER_SAVED_GAME "Load Single-Player Saved Game",
LOBBY_COUNTDOWN "Game starting in %d...",
LOBBY_COUNTDOWN_CANCELED "Canceled by host",
LOCAL_GAME "Local Game",
LOCAL_NETWORK_GAMES "Local Network Games",
LOCAL_PLAYER "Local Player",
LOG "Log",
LOW "Low",
LOW_ANIM "Low",
LOW_LIGHTS "Low",
LOW_MODELS "Low",
LOW_PARTICLES "Low",
LOW_SPELLS "Low",
LOW_TEXTURES "Low",
LOW_LATENCY "Low Latency",
LOW_VOL "Low",
LUMBER "Lumber",
MAIN_MENU "Game Menu",
MANA_STONES "Mana Stones",
MAP_EXPLORED "Map Explored",
MATCH_FILLED_WHILE_DOWNLOADING "Match filled while downloading the map",
MEDIUM "Medium",
MEDIUM_ANIM "Medium",
MEDIUM_LIGHTS "Medium",
MEDIUM_MODELS "Medium",
MEDIUM_PARTICLES "Medium",
MEDIUM_SPELLS "Medium",
MEDIUM_TEXTURES "Medium",
MEDIUM_2 "",
MELEE "Melee",
MELEE_UPGRADE "Melee Upgrade",
MENU "Menu",
MESSAGING "Messaging",
MESSAGE_LOG "Message Log",
MINIMAPTERRAINTOOLTIP "Toggle Minimap Terrain (|Cfffed312Alt-T|R)",
MINIMAPTERRAINTOOLTIP_UBER "This option will toggle the display of the terrain on the minimap.|N|NYou can use this feature if you are having difficulty seeing units on top of the terrain.",
MINIMAPALLYCOLORTOOLTIP "Set Ally Color Mode (|Cfffed312Alt-A|R)",
MINIMAPALLYCOLORTOOLTIP_UBER "This option cycles through three different unit color modes.|N|N|Cfffed312Mode 1:|R All units use Player Colors. |N|Cfffed312Mode 2:|R Minimap colors display |CFF00FFFFAllies|R and |CFFFF0000Enemies|R. |N|Cfffed312Mode 3:|R As Mode 2 and Gameworld colors display |CFF0000FFYou|R, |CFF00FFFFAllies|R and |CFFFF0000Enemies|R.",
MINIMAPCREEPCOLORTOOLTIP "Toggle Minimap Creep Display (|Cfffed312Alt-R|R)",
MINIMAPCREEPCOLORTOOLTIP_UBER "This option will toggle the display of the creep camp indicators on the minimap.|N|NThe creep camp indicators are glowing circles on the minimap which denote the location of creep camps.|N|NThe |cffff0000largest indicators|r denote high level creep camps, the |cffff8c00medium indicators|r denote mid-level creep camps, and the |cff32cd32smallest indicators|r denote low level camps.",
MINIMAPSIGNALTOOLTIP "Minimap Signal (|Cfffed312Alt-G|R)",
MINIMAPSIGNALTOOLTIP_UBER "This option will allow you to send a minimap signal notification to all your allies.|N|NTargeting a position on the minimap or in the game world will display a signal at that location on your allies' minimaps.|N|NAlternately, you can hold down Alt and left-click on the minimap or game world to perform the same action.",
MINUTE "minute",
MINUTES "minutes",
MISS "miss",
MISSING_MAP "Missing Map",
MISSION_OBJECTIVES "Mission Objectives",
MORPHING "Morphing",
MOVEMENT_SOUNDS "Movement Sounds",
MOVESPEEDVERYSLOW "Very Slow",
MOVESPEEDSLOW "Slow",
MOVESPEEDAVERAGE "Average",
MOVESPEEDFAST "Fast",
MOVESPEEDVERYFAST "Very Fast",
MULTIPLAYER_GAMECREATE_BADNAMEWORDS "Game name contains restricted words.",
MULTIPLAYER_GAMECREATE_NAMELENGTH_FORMAT "Game name is too long. Please use a shorter name.",
MULTIPLAYER_GAMECREATE_NAMEUSED "Game name already in use.",
NA "N/A",
NAME "Name",
NEED_AT_LEAST_TWO "There must be at least two non-observer players to start the game.",
NEED_MORE_TEAMS "All players are currently on the same team.|n|nYou must have at least two different teams setup to start the game.",
NEED_MORE_THAN_ONE "You must have an opponent in order to start the game.",
NETWORK_LATENCY "Network Latency",
NETWORK_OPTIONS "Network Options",
NEW_PASSWORD "New Password",
NIGHT_ELF "Night Elf",
NONE "None",
NORMAL "Normal",
NO "No",
NO_OBSERVERS "No Observers",
NON_MELEE "Scenario",
NOT_ENOUGH_POTENTIALS "There are currently not enough users who match the criteria for you to create a clan. Gather more users who meet the above criteria and refresh the potential clanmate list.",
NOT_READY "Not Ready",
OBSERVER "Observer",
OBSERVERS_ON_DEFEAT "Observers on Defeat",
OCCUPIED "Occupied",
OFF "Off",
OK "OK",
OK_WHITE "|cffffffffO|rK",
OK_WHITE_SHORTCUT "O",
ON "On",
ONE_ON_ONE "One on One",
ONLY_TERRAIN_REVEALED "Only Terrain Revealed",
OPEN "Open Slot",
CLOSE "Close Slot",
OPTIONS "Options",
OPTIONS_CONFIRM_INFO "Your resolution has been changed. Do you wish to keep the new setting?",
OPTIONS_CONFIRM_TITLE "Confirm Resolution Change",
OPTIONS_CONFIRM_TIMEOUT "Reverting resolution in:",
ORC "Orc",
OUT_OF_TIMEOUTS "Out of pause timeouts",
OUTOFSTOCKTOOLTIP "Out of stock",
OUTPUTNETCOMMANDS "Output net commands",
OVERVIEW_COLUMN0 "Unit Score",
OVERVIEW_COLUMN1 "Heroes Score",
OVERVIEW_COLUMN2 "Resource Score",
OVERVIEW_COLUMN3 "Total Score",
OVERVIEW_COLUMN3_TOURNAMENT "Tournament Score",
OVERVIEW_COLUMN4 " ",
OVERWRITE "Overwrite",
OVERWRITE_SAVED_GAME "Overwrite Saved Game",
OVERWRITE_MESSAGE "Are you sure you want to overwrite the existing save game file '%s'?",
OVERWRITE_REPLAY_MESSAGE "Are you sure you want to overwrite the existing replay file '%s'?",
PATCH_RESTART "The update was successfully downloaded. Press the restart button below to restart Warcraft III.",
PATCH_FAILED "The update has failed.",
PASSWORD "Password",
PASSWORD_RECOVERY "Password Recovery",
PASSWORD_RECOVERY_INFO "If you have forgotten your password and you registered your email address with us for this account, you can request that a new password be sent to you. Make sure to enter the email address that you registered for this account.",
PATH_OF_THE_DAMNED "Path of the Damned",
PAUSE_GAME "Pause Game",
PAUSE_GAME_NOTIFY "%s paused the game. <%u timeouts remaining>",
PAUSE_GAME_NOTIFY_NO_TIMEOUT "%s paused the game.",
PERCENT_100 "100%",
PERCENT_90 "90%",
PERCENT_80 "80%",
PERCENT_70 "70%",
PERCENT_60 "60%",
PERCENT_50 "50%",
PERSONAL "Personal",
PLAYER_DEFEATED "%s was defeated.",
PLAYER_LEFT_GAME "%s has left the game.",
PLAYER_VICTORIOUS "%s was victorious.",
PLAYER "Player",
PLAYER_NAME "Player Name",
PLAYERS "Players",
PLAYER_REPORTING_CATEGORY_LANGUAGE "Bad Language",
PLAYER_REPORTING_CATEGORY_SABOTAGE "Gameplay Sabotage",
PLAYER_REPORTING_CATEGORY_CHEATING "Cheating",
PLAYER_REPORTING_CATEGORY_BATTLETAG "Bad Battletag",
PLAYER_REPORTING_CATEGORY_GAMENAME "Bad Game Name",
PLAYER_REPORTING_CATEGORY_CLANNAME "Bad Clan Name",
PLAYER_REPORTING_CATEGORY_CONTENT "Offensive Content",
PLAYER_REPORTING_CATEGORY_DESCRIPTION_LANGUAGE "Defined as a person that says Violent, Sexist, Racist remarks in a game or chat lobby.",
PLAYER_REPORTING_CATEGORY_DESCRIPTION_SABOTAGE "Defined as (Leaver) a player that leaves at the start of the game, (AFK) a player that has not issued any commands for a long time, or (Bad Gameplay/Griefing) a player that intentionally tries to ruin another person's/teams experience.",
PLAYER_REPORTING_CATEGORY_DESCRIPTION_CHEATING "Defined as (Hacking) a player who is accessing data or information that is not normally available to players, (Botting) using third party software to manipulate game state or play the game for the player, or (Boosting/De-ranking) intentionally losing or win trading to artificially lower/raise a player's account ranking.",
PLAYER_REPORTING_CATEGORY_DESCRIPTION_BATTLETAG "Defined as a player using an offensive name (Violent, Sexist, Racist, etc.)",
PLAYER_REPORTING_CATEGORY_DESCRIPTION_GAMENAME "Defined by someone that creates a Custom Game using 'foul' language as the name of the game.",
PLAYER_REPORTING_CATEGORY_DESCRIPTION_CLANNAME "Defined as a clan that has an offensive/bad clan name (Violent, Sexist, Racist, etc.)",
PLAYER_REPORTING_CATEGORY_DESCRIPTION_CONTENT "Defined as someone that creates or hosts a map that has Offensive Imagery or Offensive Language (Violent, Sexist, Racist, etc.).",
PLAYER_REPORTING_RESULT_ERROR "[%s] Report Failed - Error &d.",
PLAYER_REPORTING_RESULT_SUCCESS "[%s] Report Submitted.",
POSITIONAL_AUDIO "3D Positional Audio",
PRIVATE "Private",
PRIVATE_GAME "Private Game",
PROFILE_MESSAGE "Each profile will hold information for your campaign progress as well as a personal saved games list. Please note that when deleting a profile, all of the above will be deleted as well.",
PROFILE_TIP "Profile Menu|n|nThis menu allows you to select the profile to use for the single-player campaigns.",
PROFILE_NEEDS_A_NAME "Please give your profile a name.",
PROFILE_NEW "New Profile",
PROFILE_NEEDDISKSPACE "There is not enough space left on disk to save this profile. Please free up more disk space and then try again.",
PROFILE_LADDER "View ladder ranking webpage for this ladder.",
PROFILE_TEAM "View ladder ranking webpage for this team.",
PROFILE_LIST "Profile List",
PUBLIC "Public",
PUBLIC_GAME "Public Game",
QUESTACCEPT "Done",
QUESTCOMPLETED "Completed",
QUESTCOMPONENTS "Requirements",
QUESTDEFEATCONDITIONS "Defeat Conditions",
QUESTDESCRIPTION "Quest Description",
QUESTFAILED "Failed",
QUESTSTATUSLABEL "Quest Status:",
QUESTS "Quests",
QUESTSMAIN "Main Quests",
QUESTSOPTIONAL "Optional Quests",
QUESTNOTDISCOVERED "Quest Not Yet Discovered",
QUESTNEEDTODISCOVER "Need to discover quest",
QUESTNOTCOMPLETED "Not Completed",
QUESTREQUIRED "Required",
QUIT "Quit",
QUIT_MISSION "Quit Mission",
RANDOM "Random",
RANGED_UPGRADE "Ranged Upgrade",
READY "Ready",
REFEREE "Referee",
REFEREES "Referees",
REPEAT_NEW_PASSWORD "Repeat New Password",
REPEAT_PASSWORD "Repeat Password",
REPLAY_CAMERA "Auto Camera",
REPLAY_CONFIRM "Incompatible Replay!",
REPLAY_CONFIRM_DESC "The replay was recorded by a different version of the game. Do you wish to attempt running the replay while ignoring recorded checksums?",
REPLAY_CONFIRM_RE_NETVERSION "Recorded net version:",
REPLAY_CONFIRM_RE_BUILD "Recorded build:",
REPLAY_CONFIRM_GA_NETVERSION "Game net version:",
REPLAY_CONFIRM_GA_BUILD "Game build:",
REPLAY_OPTIONS "Replay options",
REPLAY_SAVED "Replay Saved",
REPLAY_TOOLTIP_PAUSE "Pause/Unpause replay (|Cfffed312Pause|R)",
REPLAY_TOOLTIP_SPEED_UP "Increase replay speed (|Cfffed312+|R)",
REPLAY_TOOLTIP_SPEED_DOWN "Decrease replay speed (|Cfffed312-|R)",
REPLAY_TOOLTIP_RESTART "Restart replay",
REPLAY_TOOLTIP_LOOP "Set replay to loop",
REPLAY_VISION "Replay Vision:",
REPLAY_SPEED_AT "at ",
REQUIREDLEVELTOOLTIP "Hero level:",
REQUIRESNEARHERO "Nearby Hero",
REQUIRESNEARPATRON "Nearby Patron",
REQUIRESTOOLTIP "|Cffffff00Requires:",
RERECORDSYNCVALUES "Re-record full checksums",
RESEARCHING "Researching",
RESERVED "Reserved",
RESOURCE_TRADING "Resource Trading",
RESOURCE_UBERTIP_GOLD "Gold is mined from gold mines.",
RESOURCE_UBERTIP_LUMBER "Lumber is harvested from trees.",
RESOURCE_UBERTIP_UPKEEP "Upkeep is determined by the amount of food your forces are currently using.",
RESOURCE_UBERTIP_UPKEEP_INFO "|N%d-%d Food: %s|R (%d%% income)",
RESOURCE_UBERTIP_UPKEEP_INFO_WOOD "|N%d-%d Food: %s|R (%d%% G, %d%% L)",
RESOURCE_UBERTIP_SUPPLY "The amount of food you are using over the total amount you can currently sustain.",
RESOURCES_COLUMN0 "Gold Mined",
RESOURCES_COLUMN1 "Lumber Harvested",
RESOURCES_COLUMN2 "Resources Traded",
RESOURCES_COLUMN3 "Tech Percentage",
RESOURCES_COLUMN4 "Gold Lost to Upkeep",
RESTART "Restart",
RESUME_GAME_NOTIFY "%s has resumed the game.",
REVIVE_AT_ALTAR "Revive at Altar",
REVIVING "Reviving",
SAVE "Save",
SAVE_ERROR_BAD_SAVE "|CFFFF0000There was an error trying to load the selected save game.",
SAVE_ERROR_MISSING_MAP "|CFFFF0000The map file which the selected save game originally used was not found. (%s)",
SAVE_GAME "Save Game",
SAVE_REPLAY "Save Replay",
SAVING_GAME "Saving Game...",
SCHEDULED_GAME_TITLE "Battle.net Scheduled Game",
SCORESCREEN_TAB0 "Overview",
SCORESCREEN_TAB1 "Units",
SCORESCREEN_TAB2 "Heroes",
SCORESCREEN_TAB3 "Resources",
SCORESCREEN_TEAM_COLOR "Toggle Ally |Cfffed312C|Rolors",
SCORESCREEN_TEAM_COLOR_SHORTCUT "C",
SCREENCAP_MESSAGE "Screen Captured",
SELECT_ICON_TITLE "Battle.net User Icon Selection",
SELECT_ICON_INFO "You may choose an icon for use on Battle.net from the collection of icons that you have earned. You can earn more prestigious icons by winning progressively more games of Warcraft III.|N|NBy default your icon is selected by Battle.net to correspond with the most wins you have among all races. If you set a specific icon, you can later return to this default behavior by selecting the 'Default Icon' button.",
SELECT_DIFFICULTY_LEVEL "Difficulty Level:",
SELECTTARGET "Select Target",
SEND_TO_ALLIES "Send to Allies",
SEND_TO_OBSERVERS "Send to Observers",
SEND_TO_REFEREES "Send to Referees",
SEND_TO_EVERYONE "Send to Everyone",
SHARE_UNITS "Share Units",
SHARE_VISION "Share Vision",
SHORT "Short",
SINGLE_PLAYER_PROFILES "Single Player Profiles",
SKIP_TUTORIAL "The prologue campaign contains story elements. Are you sure you want to skip ahead to the Human Campaign?",
SLOW "Slow",
SLOW_SCROLL "Slow",
SLOWEST "Slowest",
SMALL "Small",
SOLO_GAMES "Solo Games",
SOUND "Sound",
SOUND_OPTIONS "Sound Options",
SOUND_3D_PROVIDER_FAILED "Unable to initialize 3D sound provider, 3D sound is disabled.",
SOUND_BASESERVICES_FAILED "Unable to initialize base sound services, sound is disabled.",
SOUND_BASESERVICES_FELLBACK "The selected 3D provider could not be installed, reverted to next best provider.",
SPEED "Speed",
SPELL_FILTER_INFO "Specifies extent to which spell effects are displayed.",
SQUELCH_PLAYER_NOTIFY "Ignoring chat from %s.",
STILL "Still",
STONES "Stones",
SUBGROUP_MODIFIER "Subgroup order modifier key",
SUBGROUP_MODIFIER2 "Subgroup order modifier key",
SUBTITLES "Subtitles",
SWITCH_MONITORS "Switch Monitors",
TAX "Tax",
TEAM "Team",
TEAM_ALREADY_ON_TEAM "Already on a team.",
TEAM_CREATED "Team created.",
TEAM_ERROR_FORMAT "Team error: %d, %s",
TEAM_FORMAT "Team %d",
TEAM_FULL "Team is full!",
TEAM_FULL_FORMAT "%s's team is full!",
TEAM_FULL_INVITE_FORMAT "Team is at capacity, %s couldn't join.",
TEAM_GAMES "Team Games",
TEAM_INVITE_DECLINED "Team invite declined",
TEAM_INVITER_OFFLINE "|Cfffed312%s's|R is unavailable.",
TEAM_LEFT "Left team.",
TEAM_LEFT_FORMAT "Left %s's team.",
TEAM_PROMOTED_TO_LEADER "%s promoted to leader.",
TEAM_QUEUE_CANCELED "%s has canceled the queue for %s",
TEAM_RESOURCES "Team Resources",
TEAMS "Teams",
THE_INVASION_OF_KALIMDOR "The Invasion of Kalimdor",
THE_SCOURGE_OF_LORDAERON "The Scourge of Lordaeron",
THRALLS_TRAINING "Exodus of the Horde",
THREE_TEAM_PLAY "Three Team Play",
TIME_OF_DAY_TOOLTIP "Time of Day ( |Cfffed312%s|R )",
TIME_OF_DAY_UBERTIP "This is the current time of day.|N |NThe time of day can affect visibility of units and the use of some abilities.",
TIMER_COUNTDOWN "|Cffff0000Game starting in |R%d|Cffff0000 ...",
TIPS "Tips",
TOS "Battle.net Terms of Use",
TOSAGREE1 "Please read this agreement. The 'Agree' button activates when you reach the end.",
TOSAGREE2 "Do you agree to the terms of the above agreement?",
TOURNAMENT "Tournament",
TOURNAMENT_AVAILABLE "Currently Available Tournaments:",
TOURNAMENT_FUTURE "Future Tournaments:",
TOURNAMENT_DETAILS "Tournament Details:",
TOURNAMENT_BASE_FORMAT "Base Format:",
TOURNAMENT_MAPS_USED "Maps Used:",
TOURNAMENT_RACES_USED "Races Used:",
TOURNAMENT_MAX_PLAYERS "Maximum Players:",
TOURNAMENT_NUM_ROUNDS "Number of Rounds:",
TOURNAMENT_MATCH_TIME "Match Time:",
TOURNAMENT_INFO_1 "Battle.net runs automated Warcraft III tournaments to give players the opportunity to compete directly with other players. The schedule of automated tournaments is listed to the left. Click on a tournament in the schedule to view details of that tournament.",
TOURNAMENT_INFO_2 "Tournament games have special rules associated with them due to the automated nature of the tournament. If a game does not complete within the allotted time, then both sides will incur a loss. To encourage resolution of the matches, the entire map will be revealed to all players when 5 minutes remain in the round.",
TOURNAMENT_INFO_3 "To view more rules, results, and other information about Battle.net automated tournaments on our Battle.net website, click here:",
TOURNAMENT_STATUS_INFO "To join your tournament game, you must be in the Battle.net chatroom at the time of match start. Failure to join the game in the allotted time will result in forfeiture.",
TOURNAMENT_MATCH_TIME_FMT "%d minutes", // "35 minutes",
TOURNAMENT_STATUS_TITLE "You are currently signed up for the |CFFFFFFFF%s|R tournament.",
TOURNAMENT_STATUS_ROUND_LABEL "Next Round:",
TOURNAMENT_STATUS_STARTING_LABEL "Round starts in:",
TRAINING "Training",
TWO_TEAM_PLAY "Two Team Play",
TWO_TO_EIGHT_PLAYERS "2 to 8 Players",
TWO_TO_FOUR_PLAYERS "2 to 4 Players",
TWO_TO_TWELVE_PLAYERS "2 to 12 Players",
UNDEAD "Undead",
UNDISCOVERED_QUEST "Undiscovered Quest",
UNKNOWN "Unknown",
UPGRADE_MELEE "- Increases melee damage by %d",
UPGRADE_RANGED "- Increases ranged damage by %d",
UPGRADE_ARTILLERY "- Increases artillery damage by %d",
UPGRADE_ARMOR "- Increases armor by %d",
UPKEEP_NONE "|Cff00ff00No Upkeep",
UPKEEP_LOW "|Cffffff00Low Upkeep",
UPKEEP_HIGH "|Cffff0000High Upkeep",
UPKEEP_OBSERVING "|Cff0000ffObserving",
UNIT_COLUMN0 "Units Produced",
UNIT_COLUMN1 "Units Killed",
UNIT_COLUMN2 "Buildings Produced",
UNIT_COLUMN3 "Buildings Razed",
UNIT_COLUMN4 "Largest Army",
UNIT_SOUNDS "Unit Responses",
UNKNOWNMAP_SUGGESTEDPLAYERS "?",
UNKNOWNMAP_PLAYERCOUNT "?",
UNKNOWNMAP_MAPSIZE "?",
UNKNOWNMAP_TILESET "?",
UNKNOWNMAP_DESCRIPTION "Could not find this map file on your computer",
UNRANKED "Unranked",
UNSQUELCH_PLAYER_NOTIFY "Resuming chat from %s.",
UP_ONE_LEVEL "(up one level)",
UPPER_BUTTON_MENU_TIP "Main Menu Dialog",
UPPER_BUTTON_MENU_UBER "This dialog provides access to several in-game options such as video, gameplay and sound preferences. It also allows you to end the current mission or exit the game.",
UPPER_BUTTON_ALLY_TIP "Codex Dialog",
UPPER_BUTTON_ALLY_UBER "This dialog allows you to view discovered and undiscovered codex entries for the current mission.",
UPPER_BUTTON_CHAT_TIP "Chat Dialog",
UPPER_BUTTON_CHAT_UBER "This dialog allows you to set your default chat preference and view the chat history.|N |NYou can override your default chat preference by using the following key combinations:|N- CTRL-ENTER: Send message to Allies|N- SHIFT-ENTER: Send message to Everyone",
UPPER_BUTTON_LOG_TIP "Message Log Dialog",
UPPER_BUTTON_LOG_UBER "This dialog allows you to view any quest or hint messages that have previously been displayed to you.",
UPPER_BUTTON_QUEST_TIP "Quest Dialog",
UPPER_BUTTON_QUEST_UBER "This dialog displays all of the current quests which you have been given.",
USE_INPUT_SPROCKETS "Use Input Sprockets",
USE_MAP_SETTINGS "Use Map Settings",
USER "User",
USERLIST "Userlist",
VARIABLE "Variable",
VIDEO "Video",
VIDEO_OPTIONS "Video Options",
VIEW_CLAN_RULES "View Clan Rules",
VIEW_REPLAY "View Replay",
WAITING_FOR_PLAYERS "Waiting for players...",
WAITING_FOR_HOST "Waiting for host...",
WANT_EXPANSION_DATA "Use Expansion Data",
WARCRAFT_III_TIPS "Warcraft III Tips",
WEB_WARNING "You have clicked on a link to the Internet.|N|NIf you choose to continue, Warcraft III will be minimized and your web browser will be launched. You can use the Windows Taskbar to return to Warcraft III.|N|NDo you wish to continue on to this link?",
WEB_WARNING_MAC "You have clicked on a link to the Internet.|N|NIf you choose to continue, Warcraft III will switch into windowed mode and your web browser will be launched.|N|NDo you wish to continue on to this link?",
WEB_WARNING_LADDER "You have selected to view the Warcraft III ladder website.|N|NIf you choose to continue, Warcraft III will be minimized and your web browser will be launched. You can use the Windows Taskbar to return to Warcraft III.|N|NDo you wish to continue on to the Ladder page?",
WEB_WARNING_LADDER_MAC "You have selected to view the Warcraft III ladder website.|N|NIf you choose to continue, Warcraft III will switch into windowed mode and your web browser will be launched.|N|NDo you wish to continue on to the Ladder page?",
WEB_WARNING_TOURN "You have selected to view the Warcraft III tournament website.|N|NIf you choose to continue, Warcraft III will be minimized and your web browser will be launched. You can use the Windows Taskbar to return to Warcraft III.|N|NDo you wish to continue on to the tournament page?",
WEB_WARNING_TOURN_MAC "You have selected to view the Warcraft III tournament website.|N|NIf you choose to continue, Warcraft III will switch into windowed mode and your web browser will be launched.|N|NDo you wish to continue on to the tournament page?",
WEB_WARNING_CLAN "You have selected to view the Warcraft III clan rules website.|N|NIf you choose to continue, Warcraft III will be minimized and your web browser will be launched. You can use the Windows Taskbar to return to Warcraft III.|N|NDo you wish to continue on to the clan rules page?",
WEB_WARNING_CLAN_MAC "You have selected to view the Warcraft III clan rules website.|N|NIf you choose to continue, Warcraft III will switch into windowed mode and your web browser will be launched.|N|NDo you wish to continue on to the clan rules page?",
YES "Yes",
USER_DATA_MIGRATION_INTRO_TITLE "User Data Migration Required",
USER_DATA_MIGRATION_INTRO_BODY "Warcraft III needs to change the location of your saved data.|N |NPlease close ALL applications including WorldEdit.",
USER_DATA_MIGRATION_IN_PROGRESS "Migration in progress...",
USER_DATA_MIGRATION_SUCCESSFUL_TITLE "Migration Successful",
USER_DATA_MIGRATION_SUCCESSFUL_BODY "Your Warcraft III user data is now located in your Documents folder.",
USER_DATA_MIGRATION_FAILED_ADMIN_TITLE "Administrator Required",
USER_DATA_MIGRATION_FAILED_ADMIN_BODY "Please remember to “Run as administrator” until migration has completed successfully.",
USER_DATA_MIGRATION_FAILED_SHARING_VIOLATION_TITLE "Files in Use Preventing Migration",
USER_DATA_MIGRATION_FAILED_SHARING_VIOLATION_BODY "One or more files that need to be migrated are open in another application.|N |NPlease close all applications and try again.",
USER_DATA_MIGRATION_FAILED_DISK_SPACE_TITLE "Need More Disk Space",
USER_DATA_MIGRATION_FAILED_DISK_SPACE_BODY "There is insufficient free disk space to complete the migration.|N |NPlease free up disk space and try again.",
USER_DATA_MIGRATION_FAILED_TITLE "Migration Failed",
USER_DATA_MIGRATION_FAILED_BODY "Migration failed. We will try again on your next game launch. |N |NSome of your saved maps or game data may not appear during this play session.",
IGNORE "Ignore",
RETRY "Retry",
TAIWAN_LEGAL "The system detected that you logged in from Taiwan region.|N|NAccording to the amendment of Taiwan regulations, players who are verified as Taiwan region residents must log in at least once in 365 days, otherwise the system deletes all records of this account automatically.
|NThe system sends a notice 15 days before deleting the account.
|NBe sure to provide a valid email information in the account profile to ensure that the notice will be received.
|N|N*Note *|NYou must enter “/verify-tw” in the chat room to verify that you’re a player who lives in Taiwan region.|N|NIf you select the OK button down below, it means you understand and agree with this new regulation.",
WINDOW_MODE_WINDOWED "Windowed",
WINDOW_MODE_WINDOWED_FULLSCREEN "Windowed Fullscreen",
WINDOW_MODE_FULLSCREEN "Fullscreen",
COLON_VSYNC "VSync:",
COLON_WINDOW_MODE "Window Mode:",
CAMP_INTERLUDE "Interlude",
CAMP_FINALE "Finale",
CAMP_CINEMATIC "Cinematic",
CAMP_INTRODUCTION "Introduction",
CAMP_SECRET_LEVEL "Secret Level",
CAMP_CHAPTER_1 "Chapter One",
CAMP_CHAPTER_2 "Chapter Two",
CAMP_CHAPTER_3 "Chapter Three",
CAMP_CHAPTER_4 "Chapter Four",
CAMP_CHAPTER_5 "Chapter Five",
CAMP_CHAPTER_6 "Chapter Six",
CAMP_CHAPTER_7 "Chapter Seven",
CAMP_CHAPTER_7_PART_1 "Chapter Seven, Part One",
CAMP_CHAPTER_7_PART_2 "Chapter Seven, Part Two",
CAMP_CHAPTER_7_PART_3 "Chapter Seven, Part Three",
CAMP_CHAPTER_8 "Chapter Eight",
CAMP_CHAPTER_9 "Chapter Nine",
CAMP_TUTORIAL_HEADER "Prologue Campaign",
CAMP_TUTORIAL_NAME "Exodus of the Horde",
CAMP_HUMAN_HEADER "Human Campaign",
CAMP_HUMAN_NAME "The Scourge of Lordaeron",
CAMP_UNDEAD_HEADER "Undead Campaign",
CAMP_UNDEAD_NAME "Path of the Damned",
CAMP_ORC_HEADER "Orc Campaign",
CAMP_ORC_NAME "The Invasion of Kalimdor",
CAMP_NIGHTELF_HEADER "Night Elf Campaign",
CAMP_NIGHTELF_NAME "Eternity's End",
CAMP_NIGHTELFEX_HEADER "Sentinels Campaign",
CAMP_NIGHTELFEX_NAME "Terror of the Tides",
CAMP_HUMANEX_HEADER "Alliance Campaign",
CAMP_HUMANEX_NAME "Curse of the Blood Elves",
CAMP_UNDEADEX_HEADER "Scourge Campaign",
CAMP_UNDEADEX_NAME "Legacy of the Damned",
CAMP_ORCEX_HEADER "Bonus Campaign",
CAMP_ORCEX_NAME "The Founding of Durotar",
CAMP_CIN_HUMANOP "The Warning",
CAMP_CIN_HUMANED "Arthas' Betrayal",
CAMP_CIN_TUTORIALIN "The Prophecy",
CAMP_CIN_TUTORIALOP "Thrall's Vision",
CAMP_CIN_UNDEADED "The Destruction of Dalaran",
CAMP_CIN_ORCED "The Death of Hellscream",
CAMP_CIN_NIGHTELFED "Eternity's End",
CAMP_CIN_INTROX "The Awakening",
CAMP_CIN_OUTROX "The Ascension",
CAMP_MAP_PROLOGUE01 "Chasing Visions",
CAMP_MAP_PROLOGUE02 "Departures",
CAMP_MAP_PROLOGUE03 "Riders on the Storm",
CAMP_MAP_PROLOGUE04 "The Fires Down Below",
CAMP_MAP_PROLOGUE05 "Countdown To Extinction",
CAMP_MAP_HUMAN01 "The Defense of Strahnbrad",
CAMP_MAP_HUMAN02 "Blackrock & Roll",
CAMP_MAP_HUMAN02INTERLUDE "Jaina's Meeting",
CAMP_MAP_HUMAN03 "Ravages of the Plague",
CAMP_MAP_HUMAN04 "The Cult of the Damned",
CAMP_MAP_HUMAN05 "March of the Scourge",
CAMP_MAP_HUMAN05INTERLUDE "The Prince and the Prophet",
CAMP_MAP_HUMAN06 "The Culling",
CAMP_MAP_HUMAN06INTERLUDE "Divergent Courses",
CAMP_MAP_HUMAN07 "The Shores of Northrend",
CAMP_MAP_HUMAN08 "Dissension",
CAMP_MAP_HUMAN09 "Frostmourne",
CAMP_MAP_UNDEAD01 "Trudging through the Ashes",
CAMP_MAP_UNDEAD02 "Digging up the Dead",
CAMP_MAP_UNDEAD02INTERLUDE "The Dreadlords Convene",
CAMP_MAP_UNDEAD03 "Into the Realm Eternal",
CAMP_MAP_UNDEAD04 "Key of the Three Moons",
CAMP_MAP_UNDEAD05 "The Fall of Silvermoon",
CAMP_MAP_UNDEAD05INTERLUDE "The Revelation",
CAMP_MAP_UNDEAD06 "Blackrock & Roll, Too!",
CAMP_MAP_UNDEAD07 "The Siege of Dalaran",
CAMP_MAP_UNDEAD08 "Under the Burning Sky",
CAMP_MAP_ORC01 "Landfall",
CAMP_MAP_ORC02 "The Long March",
CAMP_MAP_ORC02INTERLUDE "The Wreckage of Lordaeron",
CAMP_MAP_ORC03 "Cry of the Warsong",
CAMP_MAP_ORC04 "The Spirits of Ashenvale",
CAMP_MAP_ORC04INTERLUDE "The Blood of Mannoroth",
CAMP_MAP_ORC05 "The Hunter of Shadows",
CAMP_MAP_ORC06 "Where Wind Riders Dare",
CAMP_MAP_ORC07 "The Oracle",
CAMP_MAP_ORC08 "By Demons Be Driven",
CAMP_MAP_NIGHTELF01 "Enemies at the Gate",
CAMP_MAP_NIGHTELF02 "Daughters of the Moon",
CAMP_MAP_NIGHTELF03 "The Awakening of Stormrage",
CAMP_MAP_NIGHTELF04 "The Druids Arise",
CAMP_MAP_NIGHTELF05 "Brothers in Blood",
CAMP_MAP_NIGHTELF06 "A Destiny of Flame and Sorrow",
CAMP_MAP_NIGHTELF06INTERLUDE "The Last Guardian",
CAMP_MAP_NIGHTELF07 "Twilight of the Gods",
CAMP_MAP_NIGHTELFX01 "Rise of the Naga",
CAMP_MAP_NIGHTELFX02 "The Broken Isles",
CAMP_MAP_NIGHTELFX03 "The Tomb of Sargeras",
CAMP_MAP_NIGHTELFX04 "Wrath of the Betrayer",
CAMP_MAP_NIGHTELFX04INTERLUDE "Unfinished Business",
CAMP_MAP_NIGHTELFX05 "Balancing the Scales",
CAMP_MAP_NIGHTELFX06 "Shards of the Alliance",
CAMP_MAP_NIGHTELFX06INTERLUDE "Malfurion's Vision",
CAMP_MAP_NIGHTELFX07 "The Ruins of Dalaran",
CAMP_MAP_NIGHTELFX08 "The Brothers Stormrage",
CAMP_MAP_NIGHTELFX08FINALE "A Parting of Ways",
CAMP_MAP_HUMANX01 "Misconceptions",
CAMP_MAP_HUMANX02 "A Dark Covenant",
CAMP_MAP_HUMANX03 "The Dungeons of Dalaran",
CAMP_MAP_HUMANX03SECRET "The Crossing",
CAMP_MAP_HUMANX03INTERLUDE "The Dusts of Outland",
CAMP_MAP_HUMANX04 "The Search for Illidan",
CAMP_MAP_HUMANX04INTERLUDE "Illidan's Task",
CAMP_MAP_HUMANX05 "Gates of the Abyss",
CAMP_MAP_HUMANX06 "Lord of Outland",
CAMP_MAP_HUMANX06FINALE "Kil'jaeden's Command",
CAMP_MAP_UNDEADX01 "King Arthas",
CAMP_MAP_UNDEADX01INTERLUDE "A Kingdom Divided",
CAMP_MAP_UNDEADX02 "The Flight from Lordaeron",
CAMP_MAP_UNDEADX02INTERLUDE "Sylvanas' Farewell",
CAMP_MAP_UNDEADX03 "The Dark Lady",
CAMP_MAP_UNDEADX04 "The Return to Northrend",
CAMP_MAP_UNDEADX05 "Dreadlord's Fall",
CAMP_MAP_UNDEADX06 "A New Power in Lordaeron",
CAMP_MAP_UNDEADX07A "Into the Shadow Web Caverns",
CAMP_MAP_UNDEADX07B "The Forgotten Ones",
CAMP_MAP_UNDEADX07C "Ascent to the Upper Kingdom",
CAMP_MAP_UNDEADX07INTERLUDE "Boiling Point",
CAMP_MAP_UNDEADX08 "A Symphony of Frost and Flame",
CAMP_MODEL_ARTHAS_ILLIDAN_FIGHT "A Long Time Coming",
CAMP_MAP_ORCX01 "To Tame a Land",
CAMP_MAP_ORCX02 "Old Hatreds",
CAMP_MAP_ORCX03A "A Blaze of Glory",
CHAT_FONT_LANG_DEFAULT "Default",
CHAT_FONT_LANG_WESTERN "Western",
CHAT_FONT_LANG_KOREAN "Korean",
CHAT_FONT_LANG_JAPANESE "Japanese",
CHAT_FONT_LANG_TRADITIONAL_CHINESE "Traditional Chinese",
CHAT_FONT_LANG_SIMPLIFIED_CHINESE "Simplified Chinese",

/* This is the addition of the 1.32 WebUI Strings */

KEY_COLLECTION "Collection",
KEY_VERSUS "Versus",
KEY_DISCARD "Discard",

DIFFICULTY "Difficulty",
CURRENT_DIFFICULTY "Current Difficulty",
VERSION "Version",
CHOOSE_MISSION "CHOOSE A MISSION",
SELECT_DIFFICULTY "SELECT DIFFICULTY",
EASY_DESCRIPTION "You have little or no experience playing strategy games.",
NORMAL_DESCRIPTION "You have some experience playing strategy games.",
HARD_DESCRIPTION "Only choose Hard if you are a Warcraft III veteran.",
COLON_FILE_NAME "FILE NAME:",
FILE_NAME "FILE NAME",
DATE "DATE",
CONTINUE "Continue",
RESET "Reset",
RESET_PROGRESS "Reset Progress",
RESET_CAMPAIGN_PROGRESS "Reset Campaign Progress",
RESET_CAMPAIGN_DESCRIPTION "Are you sure you want to reset your campaign progress?",
BACK "Back",
PLAY_OFFLINE "Play Offline",
VERSUS "Versus",
MM_SEASON_0 "Frontier League",
SELECT_A_RACE "Select a race",
GAME_MODE "Game Mode",
FIND_MATCH "Find Match",
MAPS "Maps",
RACE_DESCRIPTION_HUMAN "A versatile army with good ground and air troops, excellent siege capability, and powerful spellcasters.",
RACE_DESCRIPTION_ORC "The Orcish Horde's strength lies in their raw melee power which is further enhanced by the magic of their spellcasters.",
RACE_DESCRIPTION_UNDEAD "A well-balanced faction that can field enduring ground forces and powerful air units.",
RACE_DESCRIPTION_NIGHT_ELF "The Night Elves of Kalimdor are a mighty race that emphasizes mobility, ranged firepower, and spellcraft.",
RACE_DESCRIPTION_RANDOM "A randomly selected race. Could be anything. Could even be the naga! (It's not the naga)",
MAP_PREFERENCES "Map Preferences",
BNET_MAP_VETOS "Select %d maps to exclude from your map pool.",
JOIN_LOBBY "Join Lobby",
WHISPER_LOBBY_HOST "Whisper Host",
REPORT "Report",
GAMES "Games",
GAME_NAME "Game Name",
MAP_NAME "Map Name",
PING "Ping",
GAME_FILTERS "GAME FILTERS",
NUMBER_OF_PLAYERS "Number of Players",
GAME_SPEED "Game Speed",
OBSERVERS "Observers",
MAP_FILTERS "Map Filters",
MAP_SIZE "Map Size",
MAP_TYPE "Map Type",
MAP_CREATOR "Map Creator",
NETWORK_FILTERS "NETWORK FILTERS",
REGION "Region",
LATENCY_TYPE "Latency Type",
APPLY "Apply",
VISIBILITY "Visibility",
MAP_INFO "Map Information",
LOCK_TEAMS "Lock Teams",
TEAM_TOGETHER "Team Together",
ADV_SHARED_CONTROL "Full Shared Unit Control",
RANDOM_RACES "Random Races",
RANDOM_HERO "Random Hero",
ADD_COMPUTER "Add Computer",
DOWNLOAD_MAP "Download Map",
LOGIN "Login",
LOGOUT "Logout",
PROFILE "Profile",
CONFIRM_LOGOUT "Confirm Logout",
CONFIRM_LOGOUT_MESSAGE "Logging out will remove you from the matchmaking queue.",
CONFIRM "Confirm",
ENABLE_FORMATION_MOVEMENT "Enable Formation Movement Toggle",
TEAM_COLOR_LIFEBAR "Team Colored Life Bars",
HERO_STATUS_BAR "Use Special Hero Status Bars",
SHOW_HERO_LEVEL "Show Hero Level",
SHOW_COOLDOWN_TIMER "Show Numbers For Cooldowns",
SHOW_UNIT_LIFEBAR "Show Unit Life Bars",
USER_INTERFACE "User Interface",
CHAT_SUPPORT "Chat Support",
CHAT_PLAYER_JOINED_ROOM "%s joined %s.",
CHAT_PLAYER_LEFT_ROOM "%s left %s.",
CHAT_YOU_JOINED_ROOM "You joined %s.",
CHAT_YOU_LEFT_ROOM "You left %s.",
ALWAYS_ON "Always On",
DAMAGED "Damaged",
HOTKEYS_CLASSIC "Classic",
HOTKEYS_GRID "Grid",
HOTKEYS_CUSTOM "Custom",
MONITOR "Monitor",
MONITOR_SETTINGS "Monitor Settings",
WINDOW_MODE "Window Mode",
RESOLUTION "Resolution",
VSYNC "VSync",
GAMMA "Gamma",
GRAPHICAL_QUALITY "Graphical Quality",
MODEL_DETAIL "Model Detail",
ANIMATION_QUALITY "Animation Quality",
TEXTURE_QUALITY "Texture Quality",
PARTICLES "Particles",
LIGHTS "Lights",
SPELL_FILTER "Spell Detail",
UNIT_SHADOWS "Unit Shadows",
SHADOW_QUALITY "Shadow Quality",
SHADOW_QUALITY_OFF "Off",
SHADOW_QUALITY_LOW "Low",
SHADOW_QUALITY_MEDIUM "Medium",
SHADOW_QUALITY_HIGH "High",
OCCLUSION "Fade Occluding Objects",
SCROLLING "Scrolling",
MOUSE_SCROLL_SPEED "Mouse Scroll Speed",
KEYBOARD_SCROLL_SPEED "Keyboard Scroll Speed",
CONTROLS "Controls",
PRESET_KEYBINDINGS "Preset Keybindings",
KEYBOARD_INPUT "Keyboard Input",
DISABLE_OS_KEYBOARD "Disable OS Keyboard Shortcuts",
USE_CMD_BTN_HOTKEYS "Use Command Button for Hotkeys",
USE_STANDARD_FNKEYS "Use Standard Function Keys",
VOLUME "Volume",
SOUND_EFFECTS "Sound Effects",
SOUND_EFFECTS_VOLUME "Sound Effects Volume",
MUSIC "Music",
MUSIC_VOLUME "Music Volume",
SOUNDS "Sounds",
OPTION_HD "Reforged Mode",
OPTION_HD_DISABLED_TOOLTIP "Requires Warcraft III: Reforged",
OPTION_HD_TOOLTIP "Enables Reforged Mode. Disabling this option reverts the game to Classic Mode. This option takes effect the next time a map loads.",
OPTION_PROFANITY "Profanity Filter",
OPTION_PROFANITY_TOOLTIP "Censors chat profanity.",
OPTION_TEEN "Reduced Violence",
OPTION_TEEN_TOOLTIP "This option takes effect the next time a map loads.",
HAVE_CLASSIC_ACCOUNT "Have a Classic Account?",
LINK_ACCOUNT "Link Account",
NETWORK_ERROR "Please check your network connection and try again. [Error %d]",
ERROR "Error",
JOIN "Join",
COLLECTION_PORTRAIT_01_NAME "Acolyte",
COLLECTION_PORTRAIT_01_DESC "Starter Portrait",
COLLECTION_PORTRAIT_02_NAME "Peasant",
COLLECTION_PORTRAIT_02_DESC "Starter Portrait",
COLLECTION_PORTRAIT_03_NAME "Peon",
COLLECTION_PORTRAIT_03_DESC "Starter Portrait",
COLLECTION_PORTRAIT_04_NAME "Wisp",
COLLECTION_PORTRAIT_04_DESC "Starter Portrait",
COLLECTION_PORTRAIT_05_NAME "Boat",
COLLECTION_PORTRAIT_05_DESC "Complete Exodus of the Horde on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_06_NAME "Medivh (Raven)",
COLLECTION_PORTRAIT_06_DESC "Complete Exodus of the Horde on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_07_NAME "Prince Arthas",
COLLECTION_PORTRAIT_07_DESC "Complete The Scourge of Lordaeron on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_08_NAME "Jaina Proudmoore",
COLLECTION_PORTRAIT_08_DESC "Complete The Scourge of Lordaeron on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_09_NAME "Kel'Thuzad, Necromancer",
COLLECTION_PORTRAIT_09_DESC "Complete Path of the Damned on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_10_NAME "Kel'Thuzad, Lich",
COLLECTION_PORTRAIT_10_DESC "Complete Path of the Damned on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_11_NAME "Thrall",
COLLECTION_PORTRAIT_11_DESC "Complete Invasion of Kalimdor on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_12_NAME "Grommash Hellscream",
COLLECTION_PORTRAIT_12_DESC "Complete Invasion of Kalimdor on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_13_NAME "Tyrande Whisperwind",
COLLECTION_PORTRAIT_13_DESC "Complete Eternity's End on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_14_NAME "Malfurion Stormrage",
COLLECTION_PORTRAIT_14_DESC "Complete Eternity's End on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_15_NAME "The Third War",
COLLECTION_PORTRAIT_15_DESC "Complete Exodus of the Horde, The Scourge of Lordaeron, Path of the Damned, Invasion of Kalimdor and Eternity's End on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_16_NAME "Medivh",
COLLECTION_PORTRAIT_16_DESC "Complete Exodus of the Horde, The Scourge of Lordaeron, Path of the Damned, Invasion of Kalimdor and Eternity's End on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_17_NAME "Maiev Shadowsong",
COLLECTION_PORTRAIT_17_DESC "Complete Terror of the Tides on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_18_NAME "Illidan Stormrage",
COLLECTION_PORTRAIT_18_DESC "Complete Terror of the Tides on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_19_NAME "Prince Kael'thas",
COLLECTION_PORTRAIT_19_DESC "Complete Curse of the Blood Elves on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_20_NAME "Lady Vashj",
COLLECTION_PORTRAIT_20_DESC "Complete Curse of the Blood Elves on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_21_NAME "Anub'arak",
COLLECTION_PORTRAIT_21_DESC "Complete Legacy of the Damned on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_22_NAME "Sylvanas Windrunner",
COLLECTION_PORTRAIT_22_DESC "Complete Legacy of the Damned on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_23_NAME "Rexxar",
COLLECTION_PORTRAIT_23_DESC "Complete The Founding of Durotar on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_24_NAME "Admiral Proudmoore",
COLLECTION_PORTRAIT_24_DESC "Complete The Founding of Durotar on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_25_NAME "The Frozen Throne",
COLLECTION_PORTRAIT_25_DESC "Complete Terror of the Tides, Curse of the Blood Elves, Legacy of the Damned, and the Founding of Durotar on Story or Normal in Reforged Mode.",
COLLECTION_PORTRAIT_26_NAME "The Lich King",
COLLECTION_PORTRAIT_26_DESC "Complete Terror of the Tides, Curse of the Blood Elves, Legacy of the Damned, and the Founding of Durotar on Hard in Reforged Mode.",
COLLECTION_PORTRAIT_27_NAME "Footman",
COLLECTION_PORTRAIT_27_DESC "Win 5 games in matchmaking as Human.",
COLLECTION_PORTRAIT_28_NAME "Rifleman",
COLLECTION_PORTRAIT_28_DESC "Win 20 games in matchmaking as Human.",
COLLECTION_PORTRAIT_29_NAME "Sorceress",
COLLECTION_PORTRAIT_29_DESC "Win 75 games in matchmaking as Human.",
COLLECTION_PORTRAIT_30_NAME "Gryphon",
COLLECTION_PORTRAIT_30_DESC "Win 200 games in matchmaking as Human.",
COLLECTION_PORTRAIT_31_NAME "Archmage",
COLLECTION_PORTRAIT_31_DESC "Win 500 games in matchmaking as Human.",
COLLECTION_PORTRAIT_32_NAME "Mountain King",
COLLECTION_PORTRAIT_32_DESC "Win 1000 games in matchmaking as Human.",
COLLECTION_PORTRAIT_33_NAME "Grunt",
COLLECTION_PORTRAIT_33_DESC "Win 5 games in matchmaking as Orc.",
COLLECTION_PORTRAIT_34_NAME "Headhunter",
COLLECTION_PORTRAIT_34_DESC "Win 20 games in matchmaking as Orc.",
COLLECTION_PORTRAIT_35_NAME "Spirit Walker",
COLLECTION_PORTRAIT_35_DESC "Win 75 games in matchmaking as Orc.",
COLLECTION_PORTRAIT_36_NAME "Wind Rider",
COLLECTION_PORTRAIT_36_DESC "Win 200 games in matchmaking as Orc.",
COLLECTION_PORTRAIT_37_NAME "Shadow Hunter",
COLLECTION_PORTRAIT_37_DESC "Win 500 games in matchmaking as Orc.",
COLLECTION_PORTRAIT_38_NAME "Blademaster",
COLLECTION_PORTRAIT_38_DESC "Win 1000 games in matchmaking as Orc.",
COLLECTION_PORTRAIT_39_NAME "Ghoul",
COLLECTION_PORTRAIT_39_DESC "Win 5 games in matchmaking as Undead.",
COLLECTION_PORTRAIT_40_NAME "Crypt Fiend",
COLLECTION_PORTRAIT_40_DESC "Win 20 games in matchmaking as Undead.",
COLLECTION_PORTRAIT_41_NAME "Banshee",
COLLECTION_PORTRAIT_41_DESC "Win 75 games in matchmaking as Undead.",
COLLECTION_PORTRAIT_42_NAME "Frost Wyrm",
COLLECTION_PORTRAIT_42_DESC "Win 200 games in matchmaking as Undead.",
COLLECTION_PORTRAIT_43_NAME "Dreadlord",
COLLECTION_PORTRAIT_43_DESC "Win 500 games in matchmaking as Undead.",
COLLECTION_PORTRAIT_44_NAME "Death Knight",
COLLECTION_PORTRAIT_44_DESC "Win 1000 games in matchmaking as Undead.",
COLLECTION_PORTRAIT_45_NAME "Archer",
COLLECTION_PORTRAIT_45_DESC "Win 5 games in matchmaking as Night Elf.",
COLLECTION_PORTRAIT_46_NAME "Huntress",
COLLECTION_PORTRAIT_46_DESC "Win 20 games in matchmaking as Night Elf.",
COLLECTION_PORTRAIT_47_NAME "Druid of the Claw",
COLLECTION_PORTRAIT_47_DESC "Win 75 games in matchmaking as Night Elf.",
COLLECTION_PORTRAIT_48_NAME "Chimera",
COLLECTION_PORTRAIT_48_DESC "Win 200 games in matchmaking as Night Elf.",
COLLECTION_PORTRAIT_49_NAME "Keeper of the Grove",
COLLECTION_PORTRAIT_49_DESC "Win 500 games in matchmaking as Night Elf.",
COLLECTION_PORTRAIT_50_NAME "Demon Hunter",
COLLECTION_PORTRAIT_50_DESC "Win 1000 games in matchmaking as Night Elf.",
COLLECTION_PORTRAIT_51_NAME "Mud Golem",
COLLECTION_PORTRAIT_51_DESC "Win 5 games in matchmaking as Random.",
COLLECTION_PORTRAIT_52_NAME "Troll Shadow Priest",
COLLECTION_PORTRAIT_52_DESC "Win 20 games in matchmaking as Random.",
COLLECTION_PORTRAIT_53_NAME "Ogre Mauler",
COLLECTION_PORTRAIT_53_DESC "Win 75 games in matchmaking as Random.",
COLLECTION_PORTRAIT_54_NAME "Tinker",
COLLECTION_PORTRAIT_54_DESC "Win 200 games in matchmaking as Random.",
COLLECTION_PORTRAIT_55_NAME "Firelord",
COLLECTION_PORTRAIT_55_DESC "Win 500 games in matchmaking as Random.",
COLLECTION_PORTRAIT_56_NAME "Pandaren Brewmaster",
COLLECTION_PORTRAIT_56_DESC "Win 1000 games in matchmaking as Random.",
COLLECTION_PORTRAIT_57_NAME "Draenei",
COLLECTION_PORTRAIT_57_DESC "Win 5 games in matchmaking in IGR.",
COLLECTION_PORTRAIT_58_NAME "Sentry",
COLLECTION_PORTRAIT_58_DESC "Win 10 games in matchmaking in IGR.",
COLLECTION_PORTRAIT_59_NAME "Blood Elf Lieutenant",
COLLECTION_PORTRAIT_59_DESC "Win 20 games in matchmaking in IGR.",
COLLECTION_PORTRAIT_60_NAME "Blue Demoness",
COLLECTION_PORTRAIT_60_DESC "Win 40 games in matchmaking in IGR.",
COLLECTION_PORTRAIT_61_NAME "Magroth The Defender",
COLLECTION_PORTRAIT_61_DESC "Win 80 games in matchmaking in IGR.",
COLLECTION_PORTRAIT_62_NAME "Drek'Thar",
COLLECTION_PORTRAIT_62_DESC "Win 100 games in matchmaking in IGR.",



COLLECTION_LEGACY_PORTRAIT_01_NAME "Classic Footman",
COLLECTION_LEGACY_PORTRAIT_01_DESC "Won 25 games as Human in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_02_NAME "Classic Knight",
COLLECTION_LEGACY_PORTRAIT_02_DESC "Won 250 games as Human in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_03_NAME "Classic Archmage",
COLLECTION_LEGACY_PORTRAIT_03_DESC "Won 500 games as Human in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_04_NAME "Classic Medivh",
COLLECTION_LEGACY_PORTRAIT_04_DESC "Won 1500 games as Human in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_05_NAME "Classic Grunt",
COLLECTION_LEGACY_PORTRAIT_05_DESC "Won 25 games as Orc in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_06_NAME "Classic Tauren",
COLLECTION_LEGACY_PORTRAIT_06_DESC "Won 250 games as Orc in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_07_NAME "Classic Far Seer",
COLLECTION_LEGACY_PORTRAIT_07_DESC "Won 500 games as Orc in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_08_NAME "Classic Thrall",
COLLECTION_LEGACY_PORTRAIT_08_DESC "Won 1500 games as Orc in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_09_NAME "Classic Archer",
COLLECTION_LEGACY_PORTRAIT_09_DESC "Won 25 games as Night Elves in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_10_NAME "Classic Druid of the Claw",
COLLECTION_LEGACY_PORTRAIT_10_DESC "Won 250 games as Night Elves in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_11_NAME "Classic Priestess of the Moon",
COLLECTION_LEGACY_PORTRAIT_11_DESC "Won 500 games as Night Elves in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_12_NAME "Classic Furion Stormrage",
COLLECTION_LEGACY_PORTRAIT_12_DESC "Won 1500 games as Night Elves in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_13_NAME "Classic Ghoul",
COLLECTION_LEGACY_PORTRAIT_13_DESC "Won 25 games as Undead in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_14_NAME "Classic Abomination",
COLLECTION_LEGACY_PORTRAIT_14_DESC "Won 250 games as Undead in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_15_NAME "Classic Lich",
COLLECTION_LEGACY_PORTRAIT_15_DESC "Won 500 games as Undead in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_16_NAME "Classic Tichondrius",
COLLECTION_LEGACY_PORTRAIT_16_DESC "Won 1500 games as Undead in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_17_NAME "Classic Green Dragon Whelp",
COLLECTION_LEGACY_PORTRAIT_17_DESC "Won 25 games as Random in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_18_NAME "Classic Blue Dragon",
COLLECTION_LEGACY_PORTRAIT_18_DESC "Won 250 games as Random in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_19_NAME "Classic Red Dragon",
COLLECTION_LEGACY_PORTRAIT_19_DESC "Won 500 games as Random in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_20_NAME "Classic Deathwing",
COLLECTION_LEGACY_PORTRAIT_20_DESC "Won 1500 games as Random in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_21_NAME "Classic Rifleman",
COLLECTION_LEGACY_PORTRAIT_21_DESC "Won 25 games as Human in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_22_NAME "Classic Sorceress",
COLLECTION_LEGACY_PORTRAIT_22_DESC "Won 150 games as Human in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_23_NAME "Classic Spellbreaker",
COLLECTION_LEGACY_PORTRAIT_23_DESC "Won 350 games as Human in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_24_NAME "Classic Blood Mage",
COLLECTION_LEGACY_PORTRAIT_24_DESC "Won 750 games as Human in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_25_NAME "Classic Jaina",
COLLECTION_LEGACY_PORTRAIT_25_DESC "Won 1500 games as Human in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_26_NAME "Classic Troll Headhunter",
COLLECTION_LEGACY_PORTRAIT_26_DESC "Won 25 games as Orc in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_27_NAME "Classic Shaman",
COLLECTION_LEGACY_PORTRAIT_27_DESC "Won 150 games as Orc in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_28_NAME "Classic Sprit Walker",
COLLECTION_LEGACY_PORTRAIT_28_DESC "Won 350 games as Orc in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_29_NAME "Classic Shadow Hunter",
COLLECTION_LEGACY_PORTRAIT_29_DESC "Won 750 games as Orc in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_30_NAME "Classic Rexxar",
COLLECTION_LEGACY_PORTRAIT_30_DESC "Won 1500 games as Orc in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_31_NAME "Classic Huntress",
COLLECTION_LEGACY_PORTRAIT_31_DESC "Won 25 games as Night Elves in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_32_NAME "Classic Druid of the Talon",
COLLECTION_LEGACY_PORTRAIT_32_DESC "Won 150 games as Night Elves in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_33_NAME "Classic Dryad",
COLLECTION_LEGACY_PORTRAIT_33_DESC "Won 350 games as Night Elves in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_34_NAME "Classic Keeper of the Grove",
COLLECTION_LEGACY_PORTRAIT_34_DESC "Won 750 games as Night Elves in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_35_NAME "Classic Maiev",
COLLECTION_LEGACY_PORTRAIT_35_DESC "Won 1500 games as Night Elves in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_36_NAME "Classic Crypt Fiend",
COLLECTION_LEGACY_PORTRAIT_36_DESC "Won 25 games as Undead in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_37_NAME "Classic Banshee",
COLLECTION_LEGACY_PORTRAIT_37_DESC "Won 150 games as Undead in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_38_NAME "Classic Destroyer",
COLLECTION_LEGACY_PORTRAIT_38_DESC "Won 350 games as Undead in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_39_NAME "Classic Crypt Lord",
COLLECTION_LEGACY_PORTRAIT_39_DESC "Won 750 games as Undead in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_40_NAME "Classic Sylvanas",
COLLECTION_LEGACY_PORTRAIT_40_DESC "Won 1500 games as Undead in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_41_NAME "Classic Myrmidon",
COLLECTION_LEGACY_PORTRAIT_41_DESC "Won 25 games as Random in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_42_NAME "Classic Siren",
COLLECTION_LEGACY_PORTRAIT_42_DESC "Won 150 games as Random in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_43_NAME "Classic Dragon Turtle",
COLLECTION_LEGACY_PORTRAIT_43_DESC "Won 350 games as Random in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_44_NAME "Classic Sea Witch",
COLLECTION_LEGACY_PORTRAIT_44_DESC "Won 750 games as Random in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_45_NAME "Classic Illidan",
COLLECTION_LEGACY_PORTRAIT_45_DESC "Won 1500 games as Random in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_46_NAME "Classic Felguard",
COLLECTION_LEGACY_PORTRAIT_46_DESC "Won 10 games in Tournaments in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_47_NAME "Classic Infernal",
COLLECTION_LEGACY_PORTRAIT_47_DESC "Won 75 games in Tournaments in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_48_NAME "Classic Doomguard",
COLLECTION_LEGACY_PORTRAIT_48_DESC "Won 150 games in Tournaments in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_49_NAME "Classic Pit Lord",
COLLECTION_LEGACY_PORTRAIT_49_DESC "Won 250 games in Tournaments in Classic Warcraft III.",
COLLECTION_LEGACY_PORTRAIT_50_NAME "Classic Archimonde",
COLLECTION_LEGACY_PORTRAIT_50_DESC "Won 500 games in Tournaments in Classic Warcraft III.",



SPOILS_SKIN_01_NAME "World Shaman Thrall",
SPOILS_SKIN_01_DESC "The Cataclysm rocked Azeroth to the core. In its wake, Thrall became more than Warchief of the Horde.",
SPOILS_SKIN_02_NAME "Daughter of the Sea Jaina",
SPOILS_SKIN_02_DESC "'Beware, beware the Daughter of the Sea...'",
SPOILS_SKIN_03_NAME "Fallen King Arthas",
SPOILS_SKIN_03_DESC "No king rules forever; only death is eternal.",
SPOILS_SKIN_04_NAME "Cenarius of the Emerald Nightmare",
SPOILS_SKIN_04_DESC "In his darkest hour, Cenarius became blind to the Nightmare's influence over him.",
SPOILS_SKIN_CRITERIA "Acquire Warcraft III: Reforged Spoils of War edition.",
STARTER_SKIN_CRITERIA "Starter Skin",
COLLECTION_TARGET_DESCRIPTION "Replaces %s Hero in Versus and Custom Games",
STANDARD_SKIN_01_NAME "Death Knight",
STANDARD_SKIN_01_DESC "'I do hope they stay alive long enough for me to... introduce myself.'",
STANDARD_SKIN_02_NAME "Demon Hunter",
STANDARD_SKIN_02_DESC "'There's nothing left of me but rage and determination.'",
OPTION_SETTING_AUTO "Auto",
PREF_GENERAL_LOCALE "Locale",
PREF_GENERAL_AUDIOLOCALE "Audio Locale",
PREF_INPUT_CONFINE_MOUSE_CURSOR "Confine Mouse Cursor",
PREF_INPUT_REDUCE_MOUSE_LAG "Reduce Mouse Lag",
REDUCE_MOUSE_LAG_TOOLTIP "Will make the mouse more responsive, but may drastically reduce frame rate.",
PREF_SOUND_WINDOW_FOCUS "Window Focus",
PREF_VIDEO_ANTIALIASING "Antialiasing",
PREF_VIDEO_FOLIAGE_QUALITY "Foliage Quality",
PREF_VIDEO_LIGHTING_QUALITY "Lighting Quality",
BLIZZARD_HAS_LEFT_THE_GAME "Blizzard has left the game, but we haven't left you.",
AUTH_PROGRESS_TITLE "Login Queue",
AUTH_PROGRESS_POPUP "The Blizzard servers are busy right now! You're position %d in the queue (estimated time: %ds).",
HEALTHBARS_TOOLTIP_HEADER_LABEL "Show Unit Life Bars:",
HEALTHBARS_TOOLTIP_HEADER_VALUE "Determines how unit life bars are displayed.",
HEALTHBARS_TOOLTIP_NORMAL_LABEL "Normal",
HEALTHBARS_TOOLTIP_NORMAL_VALUE "Only show when holding (ALT)",
HEALTHBARS_TOOLTIP_DAMAGED_LABEL "Damaged",
HEALTHBARS_TOOLTIP_DAMAGED_VALUE "Only show for units with less than their maximum life or mana",
HEALTHBARS_TOOLTIP_ALWAYS_LABEL "Always",
HEALTHBARS_TOOLTIP_ALWAYS_VALUE "Show all unit life bars",
TEAM_INVITATION_ALREADY_SENT "Invitation to %s already sent.",
MM_MATCH_FOUND "Match Found!",
MM_MATCH_SEARCH_STRING "Searching for %s opponents...",
MM_GAME_TYPE_1v1 "1v1",
MM_GAME_TYPE_1v1Arranged "1v1",
MM_GAME_TYPE_2v2 "2v2",
MM_GAME_TYPE_3v3 "3v3",
MM_GAME_TYPE_4v4 "4v4",
MM_GAME_TYPE_sffa "FFA",
MM_STATS_GAME_MODE_HEADER "%s STATISTICS",
MM_SEARCH_TIME_ELAPSED "Time elapsed: %ds",
MM_SEARCH_CANCEL "Click to cancel search",
MM_CHANGE_RACE "Change Race",
MM_CONFIRMATION_READY "I'm Ready!",
MM_CONFIRMATION_WAITING_HEADER "Waiting For Players",
MM_CONFIRMATION_SELECT_HEADER "Choose a Race",
MM_CONFIRMATION_HEADER_MESSAGE "Your team wants to queue for %s",
MM_CONFIRMATION_CHOOSING_RACE "Choosing Race",
MM_QUEUE_ENTERING "Queuing for %s matchmaking.",
MM_QUEUE_EXITING "Exiting %s queue.",
MM_TEAM_PREP_INIT "Your team is preparing to play a %s game",
MM_TEAM_PREP_CANCEL "%s has cancelled your team's %s preparation",
MM_ENEMY_FOUND "%s opponents found!",
MM_GAME_START "%s is starting soon(tm)...",
REPORT_MODAL_PLAYER_TITLE "Report Player",
REPORT_MODAL_GAME_TITLE "Report Game",
REPORT_MODAL_CHANNEL_TITLE "Report Channel",
CONTEXT_MENU_LEAVE_CHANNEL "Leave Channel",
CONTEXT_MENU_INVITE_TO_TEAM "Invite to Team",
CONTEXT_MENU_LEAVE_TEAM "Leave Team",
CONTEXT_MENU_KICK_FROM_TEAM "Kick from Team",
CONTEXT_MENU_PROMOTE_TO_LEADER "Promote To Leader",
CONTEXT_MENU_VIEW_PROFILE "View Profile",
CONTEXT_MENU_ADD_FRIEND "Add Friend",
CONTEXT_MENU_REMOVE_FRIEND "Remove Friend",
CONTEXT_MENU_EQUIP "Equip",
CONTEXT_MENU_UNEQUIP "Unequip",
CONTEXT_MENU_INVITE_TO_GAME "Invite to Game",
CONTEXT_MENU_JOIN_GAME "Join Game",

/* This %s is for the playername */
TOAST_PARTY_INVITE_MESSAGE "wants you to join their team!",
TOAST_GAME_INVITE_MESSAGE "wants you to join their game!",

/* This %s is for the clan name */
TOAST_CLAN_INVITE_MESSAGE "You have been invited to join the clan %s!",

/* %s is player name. */
CLAN_INVITATION_SENT "%s invited to clan.",
/* %s is clan name. */
CLAN_DISBANDED "%s has been disbanded.",

TOAST_REWARD_UNLOCKED "Reward Unlocked!",
SOCIAL_ADD_FRIENDS "Add Friends",
SOCIAL_ADD_FRIEND_INPUT_PLACEHOLDER "Enter Battletag",
SOCIAL_FILTER_FRIEND_INPUT_PLACEHOLDER "Filter Friends",
SOCIAL_PENDING_FRIEND_REQUESTS_TITLE "Friend Requests",
SOCIAL_RECENT_PLAYERS_TITLE "Recent Players",
SOCIAL_ONLINE_FRIENDS_TITLE "Online Friends",
SOCIAL_TABS_FRIENDS "Friends [%d]",
SOCIAL_NO_CLANS "You're not a member of a clan",
SOCIAL_CLAN_DESCRIPTION "A clan is a group of players who want to fight under the same banner. Clans are given their own private channels, profiles, and a position on the clan leader board, which tracks the overall play of the clan. Each clan has a name and unique clan abbreviation.",
SOCIAL_CLAN_CREATE_TITLE "Clan Creation",
SOCIAL_CLAN_CREATE_NAME "Clan Name",
SOCIAL_CLAN_CREATE_ABBREVIATION "Abbreviation",
SOCIAL_CLAN_LEADERBOARD "Clan Leaderboard",
PARTY_FRAME_INVITE_TITLE "Invite to Team",
COLLECTIONS_HEADER "Collection",
COLLECTIONS_PORTRAITS "Portraits",
COLLECTIONS_VERSUS_PORTRAITS "Versus Portraits",
COLLECTIONS_CAMPAIGN_PORTRAITS "Campaign Portraits",
COLLECTIONS_SKINS "Skins",
COLLECTIONS_CLASSIC "Classic",
ERROR_MODAL_MESSAGE_REPLAY "Replay Not Deleted",
ERROR_MODAL_CONFIRMATION "Ok",
REPLAY_MODAL_DELETE_TITLE "Are you sure?",
REPLAY_MODAL_DELETE_MESSAGE "Are you sure you want to delete %s?",
REPLAY_HEADER "Replays",
REPLAY_INCOMPATIBLE_VERSION "Incompatible Version: %d",
REPLAY_VERSION "Game Version: %d",
REPLAY_DETAILS "Replay Details:",
REPLAY_INCOMPATIBLE_DETAILS "This replay is from an older version of Warcraft III and cannot be viewed",
REPLAY_ERROR_MESSAGE "Replay information must be supplied to replay component. Replay is undefined/missing.",
MAP "Map",
FILE_NAME_LABEL "File Name",
DATE_LABEL "Date",
WATCH_REPLAY "Watch",
DURATION_LABEL "Duration:",
LOADING_MAP_CREATED_BY "Map Created By:",
LOADING_TEAM_NAME "Team %d",
SCORE_TAB_OVERVIEW "Overview",
SCORE_TAB_UNITS "Units",
SCORE_TAB_HEROES "Heroes",
SCORE_TAB_RESOURCES "Resources",
SCORE_TAB_RECAP "Recap",
SCORE_TAB_STRUCTURES "Structures",
SCORE_COLUMN_UNIT_SCORE "Unit Score",
SCORE_COLUMN_HERO_SCORE "Hero Score",
SCORE_COLUMN_RESOURCE_SCORE "Resource Score",
SCORE_COLUMN_TOTAL_SCORE "Total Score",
SCORE_COLUMN_UNITS_PRODUCED "Units Produced",
SCORE_COLUMN_UNITS_KILLED "Units Killed",
SCORE_COLUMN_STRUCTURES_PRODUCED "Buildings Produced",
SCORE_COLUMN_STRUCTURES_RAZED "Buildings Razed",
SCORE_COLUMN_LARGEST_ARMY "Largest Army",
SCORE_COLUMN_HEROES_USED "Heroes Used",
SCORE_COLUMN_HEROES_KILLED "Heroes Killed",
SCORE_COLUMN_ITEMS_OBTAINED "Items Obtained",
SCORE_COLUMN_MERCS_HIRED "Mercenaries Hired",
SCORE_COLUMN_EXP_GAINED "Experience Gained",
SCORE_COLUMN_GOLD_COLLECTED "Gold Mined",
SCORE_COLUMN_LUMBER_COLLECTED "Lumber Harvested",
SCORE_COLUMN_RESOURCE_TRADE "Resource Traded",
SCORE_COLUMN_TECH_PERCENTAGE "Tech Percentage",
SCORE_COLUMN_GOLD_UPKEEP_LOST "Gold Lost to Upkeep",
SCORE_COLUMN_TEAM_AND_PLAYER "Team & Player",
SCORE_HEADER "Match Results",
SCORE_WATCH_REPLAY "Watch Replay",
SCORE_DOWNLOAD_REPLAY "Download Replay",
CREATE_GAME_ERROR_MESSAGE "Cannot Create Game",
GAME_LOBBY_DATA_ERROR "Player information must be supplied to player component. Player is undefined/missing.",
CUSTOM_GAME_DISABLED_MESSAGE "You cannot join a Custom Game while in queue for a Versus game.",
CUSTOM_GAME_MAP_CREATED_BY "Created By: %s",
COLON_CREATED "Created:",
COLON_FULL_SHARED_CONTROL "Full Shared Control:",
JOIN_A_CHANNEL "Join a Channel",
JOIN_A_CHANNEL_MESSAGE "Enter a name below to join or create a channel.",
JOIN_CHANNEL "Join Channel",
ENTER_PLAYER_NAME "Enter Player Name",
ENTER_PLAYER_NAME_TITLE "Please enter a player name",
MAP_DOWNLOAD_MODAL_MESSAGE "%s is being downloaded. This should only take a moment.",
REPORT_MODAL_PLAYER_BODY_TEXT "What did %s do?",
REPORT_MODAL_GAME_BODY_TEXT "Why do you want to report %s game?",
REPORT_MODAL_CHANNEL_BODY_TEXT "Why do you want to report %s channel?",
REPORT_MODAL_DEFAULT_BODY_TEXT "Please select appropriate category and provide a short description.",
REPORT_MODAL_PLAYER_PLACEHOLDER "Please provide comments and details here.",
AUTHENTICATING "Authenticating...",
OFFLINE "Offline",
AWAY "Away",
BUSY "Busy",
ONLINE "Online",
INSTALL_BONJOUR_TITLE "Install Bonjour?",
INSTALL_BONJOUR_MESSAGE "Bonjour installation is required in order to continue",
INSTALL_BONJOUR_CONFIRM "Install",
INSTALL_BONJOUR_ERROR_TITLE "Retry Bonjour Install?",
INSTALL_BONJOUR_ERROR_MESSAGE "Bonjour is required to be installed to continue",
LIGHT "Light",
LOADING "Loading",

/* The word between the %l marks is to be highlighted in the UI as an external link */
ACCOUNT_LICENSE_INVALID "This account does not have a valid Warcraft III license. Click %lhere%l to purchase one.",

DEFAULT_CHAT_CHANNEL "W3 General",

//CAIS
CAIS_ALERT_PLAY_TIME "You have played %minutes% minutes today. You have %minutesRemaining% minutes of play left for the day.",
CAIS_ALERT_PLAY_TIME_CURFEW "Curfew is near. You have %minutesRemaining% minutes of play left for the day.",
CAIS_LEVEL_KR_0 "You have been playing for %hours% hours. Too much gaming is harmful to your daily life.",
CAIS_RESTRICTION_PLAY_TIME "You are out of play time for the day.",
CAIS_RESTRICTION_CURFEW "Curfew is in effect. You can login again at %hour%:00am.",

LEAVE "Leave",
REPORT_CATEGORY_LABEL "%s is:",
REPORT_BAD_LANGUAGE "Bad Language",
REPORT_BAD_LANGUAGE_DESC "Defined as a person that says Violent, Sexist, Racist remarks in a game or chat lobby.",
REPORT_GAMEPLAY_SABOTAGE "Gameplay Sabotage",
REPORT_GAMEPLAY_SABOTAGE_LEAVER_LABEL "Leaver:",
REPORT_GAMEPLAY_SABOTAGE_LEAVER_VALUE "A player that leaves within the first few minutes of the game.",
REPORT_GAMEPLAY_SABOTAGE_AFK_LABEL "AFK:",
REPORT_GAMEPLAY_SABOTAGE_AFK_VALUE "A player that has not issued any unit commands for several minutes.",
REPORT_GAMEPLAY_SABOTAGE_GAMEPLAY_LABEL "Bad Gameplay/Griefing:",
REPORT_GAMEPLAY_SABOTAGE_GAMEPLAY_VALUE "A player that intentionally tries to ruin another person’s/teams experience.",
REPORT_CHEATING "Cheating",
REPORT_CHEATING_HACKING_LABEL "Hacking/Botting:",
REPORT_CHEATING_HACKING_VALUE "A player who is using third party software to access information or play the game in a way that is not normally available to players.",
REPORT_CHEATING_BOOSTING_LABEL "Boosting/De-ranking:",
REPORT_CHEATING_BOOSTING_VALUE "Intentionally losing or win trading to artificially lower/raise a player's account ranking.",
REPORT_BAD_BATTLETAG "Bad Battletag",
REPORT_BAD_BATTLETAG_DESC "Defined as a player using an offensive name (Violent, Sexist, Racist, etc.)",
REPORT_BAD_CLAN_NAME "Bad Clan Name",
REPORT_BAD_CLAN_NAME_DESC "Defined as a clan that has an offensive clan name (Violent, Sexist, Racist, etc.)",
REPORT_BAD_GAME_NAME "Bad Game Name",
REPORT_BAD_GAME_NAME_DESC "Defined by someone that creates a Custom Game using offensive language as the name of the game.",
REPORT_OFFENSIVE_CONTENT "Offensive Content",
REPORT_OFFENSIVE_CONTENT_MAP_LABEL "Hosting Bad/Offensive custom maps:",
REPORT_OFFENSIVE_CONTENT_MAP_VALUE "Someone that creates or hosts a map that has Offensive Imagery or Offensive Language (Violent, Sexist, Racist, etc.)",
REPORT_DEFAULT "Select a category",
MM_ERROR_MSG_BAD_VERSION "A new game version is available! An update and restart is required to play Versus.",
OPTIONS_RES_CONFIRM_TITLE "Keep Changes?",
OPTIONS_RES_CONFIRM_MESSAGE "Display settings have changed. Do you want to keep these changes?",
OPTIONS_SETTINGS_CONFIRM_TITLE "Settings Modified",
OPTIONS_SETTINGS_CONFIRM_MESSAGE "You have made some changes to your settings, do you want to save these changes?",
OPTIONS_RESET_CONFIRM_TITLE "Are you sure?",
OPTIONS_RESET_CONFIRM_MESSAGE "This will discard all of your previous settings and change all settings back to the default.",
OPTIONS_RESET_KEEP_SETTINGS "Keep Settings",
OPTIONS_RESET_TO_DEFAULT "Reset To Default",
OPTIONS_OPTION_UNAVAILABLE "This option cannot be changed at this time.",

OPTIONS_REFORGED_REQUIRED_TOOLTIP "Requires Reforged Mode to be enabled.",
WINDOW_MODE_TOOLTIP "Allows you to change the primary display mode of the game to Fullscreen, Windowed, or Windowed (Fullscreen).",
WINDOW_MODE_TOOLTIP_WARNING "Windowed modes may cause a drop in performance.",
OPTIONS_REFORGED_MODE_TOOLTIP "Reforged Mode",
OPTIONS_REFORGED_MODE_DESC1_TOOLTIP "Enables Reforged graphics and content for Versus and Campaign.",
OPTIONS_REFORGED_MODE_DESC2_TOOLTIP "For Custom games, Reforged graphics will be used where possible.",
OPTIONS_REFORGED_MODE_SWITCH_TOOLTIP "Click to switch to Classic Mode.",
OPTIONS_CLASSIC_MODE_TOOLTIP "Classic Mode",
OPTIONS_CLASSIC_MODE_DESC1_TOOLTIP "Enables Classic graphics and content for Versus, Campaign, and Custom games.",
OPTIONS_CLASSIC_MODE_DESC2_TOOLTIP "Some Custom maps may not support Classic Mode.",
OPTIONS_REFORGED_UNAVAILABLE_TOOLTIP "Reforged Mode unavailable. Requires Warcraft III: Reforged",
OPTIONS_WEAK_MACHINE_TOOLTIP "This system does not meet the minimum hardware requirement.",
OPTIONS_CLASSIC_MODE_SWITCH_TOOLTIP "Click to switch to Reforged Mode.",


RESOLUTION_TOOLTIP "Higher resolutions will result in increased clarity, but this greatly affects performance. Choose a resolution that matches the aspect ratio of your monitor.",
VSYNC_TOOLTIP "Synchronizes your frame rate to some fraction of your monitor's refresh rate.",
GAMMA_TOOLTIP "Controls the gamma of the game.",
MODEL_DETAIL_TOOLTIP "High quality models allow for more variety in various models. You'll notice this most in death and build animations.",
ANIMATION_QUALITY_TOOLTIP "Determines quality of effects applied to unit animations.",
TEXTURE_QUALITY_TOOLTIP "Controls the level of all texture detail.",
TEXTURE_QUALITY_TOOLTIP_ENCOURAGEMENT "Decreasing this may slightly improve performance.",

PARTICLES_TOOLTIP "Controls the number of particles used in effects caused by spells, fires, etc.",
PARTICLES_TOOLTIP_ENCOURAGEMENT "Decrease to improve peformance.",


SPELL_FILTER_TOOLTIP "Specifies extent to which spell effects are displayed.",
SHADOW_QUALITY_TOOLTIP1 "Allows greater detail on all shadows cast.",
SHADOW_QUALITY_TOOLTIP2 "Shadow Quality relies on your graphics card.",
OCCLUSION_TOOLTIP "Enable to allow certain objects to become translucent when obscuring units from view.",
LIGHTING_QUALITY_TOOLTIP1 "Allows greater realism on all lighting effects.",
LIGHTING_QUALITY_TOOLTIP2 "Lighting Quality relies on your graphics card.",
FOLIAGE_QUALITY_TOOLTIP "Determines quantity and animation settings of terrain foliage.",
ANTIALIASING_TOOLTIP "Anti-Aliasing is a technique to smooth out jaggy edges, especially at low resolutions, but can result in a slightly blurred image.",
ANTIALIASING_TOOLTIP_WARNING "Enabling Anti-Aliasing will reduce performance.",


SOUND_EFFECTS_TOOLTIP "This controls the volume of all sounds in the game.",
SOUND_EFFECTS_VOLUME_TOOLTIP "Enables standard gameplay sound effects.",
MUSIC_TOOLTIP "Determines the volume of the background music.",
MUSIC_VOLUME_TOOLTIP "Enables background music.",
AMBIENT_SOUNDS_TOOLTIP "Enables ambient sound effects.",
UNIT_SOUNDS_TOOLTIP "Enables response sounds for when you order or select units.",
MOVEMENT_SOUNDS_TOOLTIP "Enables sounds related to units moving, such as footsteps or engines.",
SUBTITLES_TOOLTIP "Displays subtitles during cutscenes.",
ENVIRONMENTAL_EFFECTS_TOOLTIP "Enables sound effects from the environment.",
POSITIONAL_AUDIO_TOOLTIP "Enable to allow sounds to change based on their positioning.",
SOUND_WINDOW_FOCUS_TOOLTIP "Limits the game to only play sound when it is the focus window.",
GAMEPLAY_MOUSE_SCROLL_DISABLE_TOOLTIP "Enable to prevent scrolling via moving the mouse cursor near the edge of the screen.",
MOUSE_SCROLL_SPEED_TOOLTIP "Determines scrolling speed when using mouse to scroll.",
KEYBOARD_SCROLL_SPEED_TOOLTIP "Determines scrolling speed when using keyboard to scroll.",
CONFINE_MOUSE_CURSOR_TOOLTIP "Prevent the cursor from leaving the game window.",
PRESET_KEYBINDINGS_CLASSIC_LABEL "Classic:",
PRESET_KEYBINDINGS_CLASSIC_VALUE "Use original hotkeys for all commands in game.",
PRESET_KEYBINDINGS_GRID_LABEL "Grid:",
PRESET_KEYBINDINGS_GRID_VALUE "Grid profiles map each slot in the command card to a specific key. These keys are applied to all unit command cards.",
PRESET_KEYBINDINGS_CUSTOM_LABEL "Custom:",
PRESET_KEYBINDINGS_CUSTOM_VALUE "Enable specific hotkey overrides per unit and per ability. This can be accomplished by creating a file called CustomKeys.txt in your Warcraft III user data under CustomKeyBindings.",
PRESET_KEYBINDINGS_LABEL "Preset Key bindings",
PRESET_KEYBINDINGS_VALUE "Choose to play with Classic, Grid, or Custom Key bindings.",

DISABLE_OS_KEYBOARD_TOOLTIP "Disables the operating system keyboard shortcuts. Use this if you don’t want to accidentally fire operating system shortcuts during the game.",
USE_CMD_BTN_HOTKEYS_TOOLTIP "Use this if you want to use the Command key modifier for the hotkey commands instead of the Control key.",
USE_STANDARD_FNKEYS_TOOLTIP "When the option is selected, the top row of the keyboard behaves as function keys. Press the Fn key to use the special features printed on each key. When deselected, the top row will behave according to OS settings.",
MAX_FOREGROUND_FPS "Maximum FPS",
MAX_BACKGROUND_FPS "Maximum Background FPS",
MAX_FOREGROUND_FPS_TOOLTIP "Maximum framerate while running in the foreground.",
MAX_BACKGROUND_FPS_TOOLTIP "Maximum framerate while running in the background.",
GENERAL_LOCALE_TOOLTIP "Specifies the language of the text in the game.",
GENERAL_AUDIOLOCALE_TOOLTIP "Specifies the language of speech in the game.",
ENHANCED_TOOLTIPS_TOOLTIP "When enabled, displays complete information in game tooltips.",
SUBGROUP_MODIFIER_TOOLTIP "When enabled, holding CTRL only sends commands to selected subgroup within a unit group.",
ENABLE_FORMATION_MOVEMENT_TOOLTIP "When enabled, holding ALT while issuing commands ignores Formation Movement.",
TEAM_COLOR_LIFEBAR_TOOLTIP "When enabled, displays a unit's life bar using the color of the player controlling it.",
HERO_STATUS_BAR_TOOLTIP "This option makes hero units display a special background with their status bars.",
SHOW_HERO_LEVEL_TOOLTIP "When enabled heroes will display their current level on their status bar.",
SHOW_COOLDOWN_TIMER_TOOLTIP "Check this to show a number countdown for ability cooldowns.",
AUTOSAVE_REPLAY_TOOLTIP "Enable to automatically save replays for custom and matchmaker games.",
GAME_SPEED_TOOLTIP "Determines game speed for single-player content.",
RATING_SCREEN_MESSAGE_KR "본 게임물은 두 가지 등급 (‘12세 이용가’ 및 ‘청소년 이용불가’)으로 분류되었습니다. 이용자의 연령은 게임 접속 시 자동으로 확인됩니다. |Cffd428ff만12세 이상 만 18세 미만|R의 어린이나 청소년은 ‘12세 이용가’ 콘텐츠만 이용할 수 있으며, 만 12세 미만의 어린이나 청소년이 이용하기에 부적절합니다.",
RATING_SCREEN_MESSAGE_KR18 "본 게임물은 |Cffd428ff청소년 이용 불가|R 게임으로|N18세 미만의 청소년은 이용할 수 없습니다.",
RATING_SCREEN_MESSAGE_KR12 "본 게임물은 두 가지 등급(‘12세이용가’ 및 ‘청소년이용불가’)으로 분류되었습니다. 이용자의 연령은 게임 접속 시 자동으로 확인됩니다.|N|Cffd428ff만 12세 이상 만 18세 미만|R의 어린이나 청소년은 ‘12세이용가’ 콘텐츠만 이용할 수 있으며, 만 12세 미만의 어린이나 청소년이 이용하기에 부적절합니다.",

/* Map Loading Strings - Translator Note: These are jokes */
LOADING_STRING_0 "Loading...",
LOADING_STRING_1 "Summoning Murlocs...",
LOADING_STRING_2 "Waking Up Peons...",
LOADING_STRING_3 "Adding More Spikes...",
LOADING_STRING_4 "Sprinkling Blight...",
LOADING_STRING_5 "Polishing Tusks...",
LOADING_STRING_6 "Opening Portals...",
LOADING_STRING_7 "Illuminating Wisps...",
LOADING_STRING_8 "Saddling Panthers...",
LOADING_STRING_9 "Purging...",
LOADING_STRING_10 "Unpurging...",
LOADING_STRING_11 "Purging (By Fire)...",
LOADING_STRING_12 "Betraying Mercenaries...",
LOADING_STRING_13 "Paying Brewmaster's Tab...",
LOADING_STRING_14 "404 Gnomes Not Found...",
LOADING_STRING_15 "Hatching Phoenix (again)...",
LOADING_STRING_16 "Drinking From A Totally Normal Fountain...",
LOADING_STRING_17 "Waking the Bears...",

LOBBY_INVITE_ERROR_TIMEOUT "Team invite has timed out.",
LOBBY_INVITE_ERROR_ALREADY_IN_TEAM "Player is already on a team.",
LOBBY_INVITE_ERROR_RECEIVING_INVITE "Player is busy.",
LOBBY_INVITE_ERROR_SENDING_INVITE "Player is already on a team.",
LOBBY_INVITE_ERROR_INVITING_INVITER "Player is already on a team.",

CLAN_SETTINGS "Clan Settings",
CLAN_SETTINGS_LEAVE_TITLE "Are you sure?",
CLAN_SETTINGS_LEAVE_MESSAGE "Are you sure you want to leave %s?",
CLAN_SETTINGS_LEAVE_ACTION "Leave Clan",
CLAN_SETTINGS_DISBAND_MESSAGE "Are you sure you want to disband %s?",
CLAN_SETTINGS_DISBAND_ACTION "Disband Clan",
CLAN_INFO "Clan Info",
MEMBERS "Members",
CLAN_MESSAGE_OF_THE_DAY "Message of the Day",
CLAN_MESSAGE_OF_THE_DAY_PLACEHOLDER "Enter Message of the Day",
CLAN_RANK "Service Rank",
CUSTOM_GAME_NAME_ERROR "Please give your lobby a name. Lobby names can be up to 31 characters long.",
CUSTOM_GAME_SELECT_MAP_ERROR "Please select a map.",
CUSTOM_GAME_DIRECTORY_INFO "You can also open a folder by double-clicking it.",
CUSTOM_GAME_OPEN_FOLDER "Open Folder",
UNAVAILABLE_IN_QUEUE_ERROR "Unavailable while in a Matchmaking Queue.",
UNAVAILABLE_IN_TEAM_ERROR "Currently unavailable while in a Team.",
CONFIRMATION_MODAL_CONFIRM_PLACEHOLDER "Type %s to confirm",
ERROR_MESSAGE_REJOINING_QUEUE "Failed to Join Game. re-Queuing for %s matchmaking.",
TEAM_INVITE_DECLINE_ALREADY_IN_TEAM "%s is already in a team",
TEAM_INVITE_DECLINE_BUSY "%s is busy",
TEAM_INVITE_DECLINE_CINEMATIC "%s is watching a cinematic",
TIME_ELAPSED_LABEL "TIME ELAPSED:",

ACCOUNT_MANAGEMENT_CLASSIC_LINK "Link Classic Account",
ACCOUNT_MANAGEMENT_CLASSIC_VERIFY "Verify",
ACCOUNT_MANAGEMENT_CLASSIC_HELP "Can't access your account?",
ACCOUNT_MANAGEMENT_CLASSIC_USERNAME "Username",
ACCOUNT_MANAGEMENT_CLASSIC_EMAIL "Email Address",
ACCOUNT_MANAGEMENT_CLASSIC_ENTER_PROFILE "Enter a Profile Name",
ACCOUNT_MANAGEMENT_CLASSIC_GATEWAY "Select Gateway",
ACCOUNT_MANAGEMENT_CLASSIC_PASSWORD "Classic Password Recovery",
ACCOUNT_MANAGEMENT_CLASSIC_PASSWORD_SUBMIT "Submit",
ACCOUNT_MANAGEMENT_CLASSIC_PASSWORD_REQUEST "Request Received",
ACCOUNT_MANAGEMENT_CLASSIC_PASSWORD_INSTRUCTIONS "If you've registered an email address for this account you will received an email with instructions on how to complete your password change.",
ACCOUNT_MANAGEMENT_CLASSIC_EXPIRATION_HEADER "Haven't Logged in for awhile?",
ACCOUNT_MANAGEMENT_CLASSIC_EXPIRATION_BODY "If you haven't logged in to your classic Warcraft III account for 3+ months, it has most likely expired and can no longer be accessed.",
ACCOUNT_MANAGEMENT_CLASSIC_ACCOUNT_VERIFIED_HEADER "Account Verified",
ACCOUNT_MANAGEMENT_CLASSIC_ACCOUNT_VERIFIED "Your classic account stats have been merged into your Warcraft III: Reforged Account.",
ACCOUNT_MANAGEMENT_CLASSIC_THANKS_MESSAGE "Thank you for being a part of the WarCraft III community. We couldn't have done any of this without you.",
ACCOUNT_MANAGEMENT_CLASSIC_THANKS_SIGNATURE "- Blizzard Entertainment",
ACCOUNT_MANAGEMENT_CLASSIC_LINK_LEGACY_HEADER "Classic Battle.net Account Expiration",
ACCOUNT_MANAGEMENT_CLASSIC_LINK_LEGACY_BODY "Classic Battle.net accounts expire 3 months after your last connection to classic Battle.net. Link your account now to immortalize your classic stats!",
ACCOUNT_MANAGEMENT_CLASSIC_LINK_LEGACY_OKAY "Okay",


CHAT_MESSAGE_THROTTLED "Message could not be sent. You have rapidly sent too many messages.",
CHAT_CHANNEL_FULL "Channel %s is full.",
CHAT_USER_UNKNOWN "That user is not logged on.",
CHAT_USER_NOT_FRIEND "This player cannot receive your whispers because you are not friends with them.",
CHAT_CHANNEL_JOIN_FAILED "Failed to join channel.",
CHAT_MESSAGE_FAILED "Failed to deliver message.",
VICTORY "Victory",
DEFEAT "Defeat",
LOST "Lost",
KILLED "Killed",
RAZED "Razed",
SELECT "Select",
GAME_BEHAVIOR "Game Behavior",
CLASSIC "Classic",
REFORGED "Reforged",
PREF_VIDEO_TEXTURES "Textures",
PREF_VIDEO_SPELLS "Spells",
PREF_VIDEO_SHADOWS "Shadows",
PREF_VIDEO_LIGHTING "Lighting",
PREF_VIDEO_FOLIAGE "Foliage",
LANGUAGE "Language",
PREF_SOUND_UNIT "Unit Sounds",
PREF_SOUND_ENABLE_SUBTITLES "Enable Subtitles",
PREF_SOUND_TEXT "Text",
PREF_SOUND_AUDIO "Audio",

FRIEND_FRIEND_REMOVED "Friend removed.",
FRIEND_INVITE_SUCCESS "Friend request sent.",
FRIEND_ALREADY_FRIENDS "You are already friends with that player.",
FRIEND_ALREADY_INVITED "You already sent a friend invitation to that player.",
FRIEND_FRIEND_LIMIT "Your friends list is full.",
FRIEND_ERROR_TOON_NAME "That is not a valid name. Please try again.",

WHISPER_OUTBOUND "<To: %s>",
WHISPER_INBOUND "<From: %s>",

CONFIRM_OVERWRITE_REPLAY_MSG "Are you sure you want to overwrite this replay?",
CAMPAIGN_CLASSIC_TOOLTIP "The original Warcraft III campaign with classic graphics.",
CAMPAIGN_REFORGED_TOOLTIP "The Warcraft III campaign updated with new graphics, lost missions, and other quality of life improvements.",
CAMPAIGN_DISABLED_TOOLTIP "Purchase Warcraft III: Reforged to enable Reforged Campaigns.",
CAMPAIGN_TOOLTIP_LABEL "Campaign Version",
CAMPAIGN_WARNING_MESSAGE "The Prologue Campaign contains story elements. Are you sure you want to skip ahead?",
PLAY_PROLOGUE "Play Prologue",
SKIP_AHEAD "Skip Ahead",

/* Presence Strings */
PRESENCE_CAMPAIGNS "Browsing Campaign",
PRESENCE_CAMPAIGNS_PLAYING "Playing Campaign",

PRESENCE_COLLECTIONS "Browsing Collections",

PRESENCE_CUSTOMGAMES "Browsing Custom Games",
PRESENCE_CUSTOMGAMES_LOBBY "Waiting for %s", /* %s - map name */
PRESENCE_CUSTOMGAMES_PLAYING "Playing %s", /* %s - map name */

PRESENCE_MAIN_MENU "On Main Menu",

PRESENCE_REPLAYS "Browsing Replays",
PRESENCE_REPLAYS_WATCHING "Watching a Replay",

PRESENCE_VERSUS "Preparing for War",
PRESENCE_VERSUS_TEAMED "Preparing for War with Others",
PRESENCE_VERSUS_QUEUED "In Queue for %s", /* %s - game mode */
PRESENCE_VERSUS_PLAYING "In a %s Match", /* %s - game mode */

ERROR_ID_BNET_ACCOUNT_BANNED "This Blizzard account is banned. Please check your email for additional details.",
ERROR_ID_GAME_ACCOUNT_BANNED "This Warcraft III account is banned. Please check your email for additional details.",
ERROR_ID_GAME_ACCOUNT_LOCKED "This Warcraft III account has been locked. Please check your email for additional details.",
ERROR_ID_GAME_ACCOUNT_SUSPENDED "This Warcraft III account has been suspended. Please check your email for additional details.",
CHAT_ACCOUNT_MUTED "You are currently silenced.",

SCORE "Score",
LINK_ACCOUNT_ERROR "Invalid Username and/or Password",
CLANS_DISABLED_TOOLTIP "Clans have been disabled and will return in a future update.",
LOAD_GAME_DISABLED_TOOLTIP "The ability to load a custom game save has been disabled and will return in a future update.",

/* Options - Universal Access Modal - For Mac Options */

OPEN_SYSTEM_PREFERENCES "In order to use this option, you must grant access to Warcraft III in Security & Privacy preferences, located in System Preferences. Would you like to open System Preferences now?",
OPEN_STRING "Open",
UNIVERSAL_ACCESS_REQUIRED "Universal Access Required",
FILTER_REPLAYS "Filter Replays",
FILTER_GAMES "Filter Games",
FILTER_SAVED_GAMES "Filter Saved Games",
FILTER_CAMPAIGN_SAVES "Filter Campaign Saves",
COPYRIGHT "©%d BLIZZARD ENTERTAINMENT, INC. ALL RIGHTS RESERVED.",
TEAM_INVITE_DISABLE_TOOLTIP "The arranged team feature is not available in custom games at this time.",

/* 1.32.2 Updates */

LOBBY "Lobby",
WHISPERS "Whispers",
FILTER_CLAN_MEMBERS_INPUT "Filter Clan Memebers",
OPTION_UNAVAILABLE_INGAME "This option cannot be modified while you're in a game.",
TRUE "true",
FALSE "false",
INVALID_CLAN_NAME "Clan names can be 3-64 characters long.",
INVALID_CLAN_ABBREVIATION "Clan abbreviations can be 2-4 characters long.",
STATS_WINS_LABEL "Wins",
STATS_MMR_LABEL "MMR",
STATS_TOOLTIP_TITLE "What is MMR?",
STATS_TOOLTIP_DESC1 "Matchmaker Rating is used to find similarly skilled opponents for Versus.",
STATS_TOOLTIP_DESC2 "A number of variables are used to create the rating, but simply put wins increase MMR and losses decrease MMR. Matchmaking systems historically need adjustment to find the sweet spot between healthy queue durations and quality gameplay, so we're in an exhibition period to gather data and tweak the system. Every game you play will help us improve the rating algorithm, and we'd love to hear your feedback on the forums.",
VERSUS_MENU_DISABLED_TOOLTIP "Only the team leader can begin the search for opponents and select map vetoes.",

/* 1.32.3 Updates */
CHAT_MEMBER_SQUELCH "Ignore",
CHAT_MEMBER_UNSQUELCH "Unignore",
CHAT_MEMBER_SQUELCH_SUCCESS "%s has been ignored.",
CHAT_MEMBER_UNSQUELCH_SUCCESS "%s is no longer ignored.",

/* 1.32.4 Updates */
MONITOR_TOOLTIP "Allows you to change the primary monitor used by the display.",
/* 1.32.5 Updates */
WHISPER_TOOLTIP "Some social options are unavailable when interacting with players in other Battle.net regions.",

/* 1.32.8 Updates */
TOAST_REPLAY_DOWNLOADED "Replay %s saved.",
LOCK_TEAMS_TOOLTIP "Players cannot break their alliances or create new ones.",
TEAM_TOGETHER_TOOLTIP "Teammates are automatically placed near each other.",
ADV_SHARED_CONTROL_TOOLTIP "Allies can control each other’s units, including construction buildings, spending resources, and choosing hero abilities.",
RANDOM_RACES_TOOLTIP "Players are locked to Random as their race selection.",
RANDOM_HERO_TOOLTIP "Players start with a random hero from their starting race.",
}
[/code]

The latter is localized in english, of course. Now, to load these files, we need two .toc files, as follows:


Code:
UI\FrameDef\HiddenAllianceSlot.fdf


Code:
UI\FrameDef\CodexGlobalStrings.fdf

Both just load the relative .fdf file. They could be condensed in just one file, but for the sake of modularity I think this division is preferable.
Now, you need to import these files into your map through the asset manager. I usually give them suitable paths to distinguish from the models and textures, like:
  • UI\FrameDef\CodexDialog.fdf
  • UI\CodexDialog.toc
  • ...
If you want it localized, you need to make sure the .fdf files containing the strings are set to the appropriate local in the Asset Manager within the editor. There is no need to ever localize .toc files.


CODEX UI: CUSTOM SCRIPTS
This section illustrates the custom scripts required for the codex to work, it applies for both the Lua and JASS versions. Please note that the Lua version is a bit more up-to-date than the JASS version, since I've dropped JASS for Warcraft 3 Re-Reforged. Still, JASS is perfectly fine and functional and the content of this section is exactly the same.

The core of the codex system relies on the functions attached in the second page of this sytem. It's written in Lua, but you can find here a JASS version. You can use the one you prefer depending on your map, they are basically the same.

No matter the language you choose, there are multiple functions to explain, lets discuss them in order:
  1. CodexDialogUpdateEntries: this function sets the title text of all codex entries buttons depending on their current state (discovered or undiscovered, which are GUI global variables). All frames are referenced by their unique name.
  2. CodexDialogEntryAllButtonsDeselect: this function deselects all the codex entries' buttons by making their highlights invisible. It also hides the display textarea and set the current selected entry global GUI variable to -1, which is the value for none selected. All frames are referenced by their unique name.
  3. CodexDialogSelectEntry: this function takes the integer codex entry number as parameter and selects the specified codex entry button. When selecting, it makes the highlight visible and then it both shows and enables the display textarea if the relative entry global variable is set to discovered. All frames are referenced by their unique name.
  4. CodexDialogEntryOneButtonClickAction, CodexDialogEntryTwoButtonClickAction, ..., CodexDialogEntrySixButtonClickAction: each one of these functions deselect all the codex entries' buttons and then select the referenced one one. Number defines which entry (One, Two, Three, etc. up to Six).
  5. CodexDialogDoneButtonClickAction: this function defines what to do when the done button is clicked in the codex dialog. Specifically, it closes the codex dialog by closing the invisible alliance dialog underneath it. All frames are referenced by their unique name.
  6. SetupCodexDialog: this function takes the number of available codex entries as parameter and it's the initialization function of the codex system as a whole. It uses a set of GUI triggers (explained in a later section) for each entry and makes all the elements within the alliance dialog frame invisibile (in addition to the modified .fdf file). To support reloading, it destroys any already defined frame with name "CodexDialog" and it generates one more, setting the alliance dialog frame as parent. Then, for each one of the available entries, it defines a default state and associate the relative pre-defined GUI trigger by registering the button click event. Finally, it updates all the entry, to account for when the map is reloaded.
  7. AlliesButtonKeepEnabled: this function makes sure the allies button, which is now the codex button, is active so long the main menu is active. This allows the codex system to be fully seamless with all the other game systems, such as cinematics, other menu buttons, etc.
  8. AllianceDialogKeepPaused: this function makes sure the game is paused as soon as the alliance dialog is shown. This is not default behaviour of the game, since the alliance dialog is only available in multiplayer where it doesn't pause the game when opened. To pause the game, this function relies on additional pre-defined GUI triggers. It is also repeatedly invoked with a periodic event through all the game while the codex dialog is hidden.
  9. AllianceDialogClearPaused: this function is repeatedly run while the alliance dialog is shown. It makes sure the focus of the player is kept on the codex dialog. It also check wheter both its state and its parent frame state are set appropriately when the alliance dialog is hidden. Note that this function loop runs while the game is paused because game pause doesn't stop TriggerSleepAction.

CODEX UI: TRIGGERS
This section illustrates the GUI triggers used to run the custom scripts and the overall structure of the codex UI underlying routines.

The codex system uses quite a few of GUI triggers. I know this could be done all in JASS or Lua, but I do prefer to use GUI whenever possible to make routines more transparent and easy to visualize to all kind of people. That especially holds true when triggers are used. So, lets discuss all the various triggers, in no particular order:

codex_ui_reload.png

The trigger above takes care of re-executing setup (a part of codex initialization) when game is loaded. The delay is a safety measure to make sure everything is loaded correctly up to this point (avoiding it to being run while in the loading screen), and it's not noticeable by the player.

codex_ui_maintenance_runtime.png
codex_ui_maintenance_menu.png

The first trigger runs only while the game is not paused and it pauses the game as soon as it detects the alliance dialog is opened (through the first custom script call). The periodic time of 0.25 seconds I empirically found to be a good tradeoff of performances and speed when pausing so I sticked to it. The second action makes sure to keep the button enabled while the menu button is also enabled.
The second trigger has no event, and it's run from within the custom script described in previous section. The executed action is described there as well.

codex_ui_pause.png

codex_ui_unpause.png


These triggers pause/unpause the game whenever they are run. That happens from within the custom scripts described in the previous section. The filter is set that way to imitate the pause functionality of the game (when any default menu button is clicked in single player).

There is something very nice to notice here. As you could see in one of previous triggers, specifically the one about reloading the codex, I am using Wait game-time actions. This is not an error on my end, but it's necessary to make the codex work. Indeed, whenever the game is paused using Pause Game action, simple Wait actions (which are the equivalent of TriggerSleepAction functions) do not stop. I didn't notice any performance problem by switching from simple Wait actions to Wait game-time actions, neither did my players, so they are definitely good to use.

A very interesting thing is that this strange behaviour of the Wait action is what allows me to make the codex system work. Basically, since the Alliance Dialog is built into the game UI, I cannot intercept any event to know when it's shown or hidden. Neither I can check when the button is clicked without breaking the default game UI events. This is why I execute periodic checks to see if the Alliance Dialog is shown and pause/unpause the game depending on it.

Problem is, timers don't work when game is paused. This is why the Wait game-time action, which in reality consists in a small timer, does make the triggers wait when the game is paused by the means of the Pause Game action. Without a timer, I could not do a periodic check to know when to unpause the game.
The fact that the simple Wait action is not stopped by Pause Game action, allows me to run an endless loop (when the Alliance Dialog is shown) in the custom script code which checks for the current visibility of the Alliance Dialog and unpauses the game running the Codex UI Maintenance Menu trigger accordingly.

codex_ui_entry_button_clicked.png

This trigger (alongside its brethren) is one of the triggers referenced in previous section. Specifically, a button click event is dynamically added to it and it is executed whenever a codex entry button is clicked.

codex_ui_update_entries.png

This trigger, instead, is executed from the custom scripts described in previous section and it just executes the displayed action. For additional detail about that action, see previous section.

codex_ui_done_button_clicked.png

Finally, also this triggers is referenced in previous section. Specifically, a button click event is dynamically added to it and it is executed whenever the codex done button is clicked.

Please note that for the reasons explained in this section, all triggers and custom scripts now require to use a Wait game-time action to make them compatible with the codex system. This is so because the Pause game action doesn't stop the simple Wait action, and would not be possible to just open the codex dialog without breaking the map scripts and triggers.


CODEX ENTRIES: TRIGGERS AND VARIABLES
This section illustrates the GUI triggers and the global variables used to manage the codex entries, including the pick-up process and relative graphics.

To manage what actually changes from mission to mission, the entries, we need another set of triggers and a set of global variables. This is much simpler code and it doesn't interact directly with the codex UI underlying system and its custom scripts. We discuss both the triggers and the variables in no specific order:

codex_entry_show_floating_text.png


In the trigger above, a floating text is displayed at the saved position. This position is saved in the following trigger:

codex_entry_picked.png


Here, through the event we check when the user acquires a specific item type (only one item of that type is supposed to be in the map at any given time, since a different item type is defined for each codex entry).
Some info about the picking process, specifically an UI sound (meaning, on the user interface channel) and the floating text described above, are shown if not currently playing any cinematic. This measure exists to avoid this kind of situation: a cinematic could start while a unit is going to acquire the codex entry item and the actual event coudl fire when the cinematic is already started, detracting from scene's immersion.
Then, we set three variables which are referenced in the custom scripts functions of the second section and are saved when the map is actually saved, allowing the map to remember all the codex entries states and values on reload. Please note that since title and content strings are pulled directly from the items, they dynamically support localizations.
Finally, we call execute one of the UI triggers defined at the previous section. The last bit is about an hint, which is only executed the first time thanks to the conditional execute. This trigger is not required for the codex to function.

Now, the following are all the global variables used (all relative to the entries, except for two that are relative to the UI and used in the functions described in the second section). I think they are pretty straightforward, and what they do can be inferred from their names:

codex_entry_variables.png


When I implement the codex in one of my maps, I just copy-paste all the variables, all the triggers and all the custom scripts. So, it's very easy to port from map to map.
Once the underlying system is ported, I just change the item types variables default values to the codex entries scroll items defined for that map.
Finally, I import all the sounds and assign each sound variable appropriately in the codex initialization trigger, which is the last section we are going to cover.


CODEX SETUP: INITIALIZATION AND ITEMS
This section describes how to initialize the codex system and how the items, used as pickable scrolls in the treasure hunt minigame, are designed.

First of all, lets see how the codex system is initialized. I usually do so at map initialization, as follows:

codex_init.png


The number 12 is part of my own enumeration convention for initialization triggers and it's not required (indeed, there is no numeration on the attached sample map). Anyway, I would advise loading the codex after you have performed all the remaining initialization of your map.
The first part of the trigger load the .toc file where the codex .fdf and codex string .fdf (which is usually a localized asset) are loaded. Then, the codex setup function is called. This function was described in the second section, and it's part of the codex UI custom scripts. Then, we enable the periodic event trigger related to the UI maintenance. Finally, we assign a different sound variable to each entry sound.
This, however, is not enough to load the codex. Indeed, the hidden alliance dialog and the updated global strings described in the first section, and contained in two .fdf files and load through two .toc files, cannot be loaded like CodexDialog.toc. The reason for that lies in the fact these two .fdf overwrite default game stuff. Because of that, we need to load them before the map is launched.
To do so, we need to call the BlzLoadTOCFile function before initialization. Specifically, in the config section of the map script.
The way this is done varies depending on the scripting language you are using in the map. For completion, I will post both the Lua and the vJASS versions (even is JASS version is only required when JASS version of this system is used):


vJASS:
// Change the map config (vJASS) to load the custom upper menu bar
//! inject config
    call SetMapName( "TRIGSTR_000" )
    call SetMapDescription( "TRIGSTR_002" )
    call SetPlayers( 4 )
    call SetTeams( 4 )
    call SetGamePlacement( MAP_PLACEMENT_USE_MAP_SETTINGS )

    call DefineStartLocation( 0, -5248.0, -1600.0 )
    call DefineStartLocation( 1, 3712.0, 3648.0 )
    call DefineStartLocation( 2, -5888.0, 4352.0 )
    call DefineStartLocation( 3, 3904.0, 3328.0 )

    // Player setup
    call InitCustomPlayerSlots(  )
    call InitCustomTeams(  )
    call InitAllyPriorities(  )

    // Load TOCs
    call BlzLoadTOCFile("UI\\CodexGlobalStrings.toc")
    call BlzLoadTOCFile("UI\\HiddenAllianceSlot.toc")
//! endinject


Lua:
-- Load predefined TOCs

BlzLoadTOCFile("UI\\CodexGlobalStrings.toc")
BlzLoadTOCFile("UI\\HiddenAllianceSlot.toc")

The Lua version is pretty straightforward. You have only to be sure to put the two lines of code in the root of your map. If don't know what the root is, please refer to some Lua tutorial. Usually, with the trigger editor opened, I just put that code in the custom script code section of the root folder (which has the same name as the map).
While the JASS version should be put in the same place as the Lua version, it is far more complex, and that beside requiring vJASS!
Basically, you need to manually inject your custom config script inside the map config script, replacing it. This is much slower to do, and not only for the syntax. As you can see, there are many more lines of code than the two Lua requires. That is because you need to rewrite the entire default config of your map, adding the .toc loading function to it. Because of that all the lines except for those two shared with the Lua version change depending on the map. The one you see here are from Warcraft 3 Re-Reforged: Exodus of the Horde, chapter one Chasing Visions.
Since writing these lines by hand is problematic, there is a way to find out these lines by looking at what the editor generates itself:
  1. Remove any inject section from your custom script code section of your map
  2. Put a typo in the custom script code section of your map
  3. When JassHelper detects the error, navigate to the config section of the generated map script
  4. Copy that section and paste it inside an inject block
  5. Add the two functions required at the end
Note that if you change a player starting location, a player name, etc. you need to manually redo all these steps to have the changes apply.
Finally, we can cover the items. First of all, here you can get the same scroll model used in Re-Reforged.
Then, the items definition is pretty straightforward and user friendly:


codex_item.png


CONCLUSIONS

And... this is it people!
You can now easily setup and use the Re-Reforged codex system in your map/campaign. You are free to use it, change it or improve it as you like, just remember to always give credits if you do. I really want the custom campaigns and single player maps communities to shine, and I think this system could prove very very useful to many mapmakers out there, whose stories and worlds deserve to be told in a deep, modern and actually fun approach. It is, of course, compatible with classic graphics (except for the scroll model, but I guess it's easy to find an alternative).

Have fun preparing a lot of new hot lore!

What follows it the list of known issues, as far as I know:
  • If you load your map from the Reforged menu or another map which has no implemented codex, HiddenAllianceDialog.toc and CodexGlobalStrings.toc are not loaded. This is an engine bug (it doesn't consider configuration edit in that phase) and there is no way to fix it. If you load from the same map or another map implementing the codex, the codex is correctly loaded.
  • Sometimes, very rarely actually, when the codex dialog is closed, the player is unable to click or select in the game world. I cannot reproduce this bug consistently, so I don't know how to fix it. Saving and reloading the map fix the issues, though, so it's not game breaking. If anyone finds a way to reproduce this bug or knows what causes it, I will gladly fix it and update the system accordingly.
 

Attachments

  • codex_dialog.zip
    320.3 KB · Views: 116
  • CodexSystemExampleMapLua.w3m
    512.4 KB · Views: 82
Last edited:
Top