Skip to main content
abilities.kv is the authoritative list of every ability that can appear on the Legends of Dota Redux skill-select screen. It is loaded at game start and drives what players can choose when drafting their build.

Top-Level Structure

The file has two top-level blocks inside the root "Abilities" key:
BlockPurpose
skillsAll ability brackets — the main pickable pool, neutrals, OP abilities, single-player abilities, etc.
heroToSkillMapOptional per-hero starting ability overrides (most entries are commented out).

Ability Brackets

Brackets are named sub-blocks inside skills. Each bracket groups abilities that share a category or restriction.
BracketDescription
mainThe primary pool. All standard and custom abilities available in normal games.
neutralNeutral creep abilities, further sub-divided by creature archetype group (e.g. alpha_wolf_group, black_dragon_group).
brawlerBrawler-class abilities (melee-only reversed Marksmanship variants).
spell_labSpell Lab custom abilities.
oneshotonekillOne-shot/one-kill combo abilities.
overflowOverflow custom abilities from the Overflow ability pack.
angel_arena_blackstarAngel Arena Blackstar abilities.
resurgenceResurgence abilities.
radiant_jungleRadiant Jungle abilities.
overflow_ultOverflow ultimate abilities.
mercyMercy abilities.
holdoutHoldout abilities.
item_abilitiesAbilities derived from items.
cherub_abilitiesCherub hero abilities.
uther_abiliitesUther hero abilities.
proteus_abiliitesProteus hero abilities.
The numbers assigned to each ability entry ("1") are used internally for network-encoding ability selections and for the encryption layer — they are not ability levels.

File Format

"Abilities"
{
    "skills"
    {
        "main"
        {
            // Custom redux ability
            "morph_int_str_redux"                 "1"  // custom

            // Standard Dota ability
            "pudge_flesh_heap"                    "1"

            // Commented-out sub-ability (excluded from picking)
            //"alchemist_unstable_concoction_throw"  "1"  // sub-ability of Unstable Concoction
        }

        "neutral"
        {
            "alpha_wolf_group"
            {
                "alpha_wolf_critical_strike"      "1"
                "berserker_troll_break"           "1"
                "ghost_frost_attack"              "1"
                "gnoll_assassin_envenomed_weapon" "1"
                "kobold_disarm"                   "1"
            }
        }
    }

    "heroToSkillMap"
    {
        // "npc_dota_hero_abaddon"
        // {
        //     "1"  "abaddon_aphotic_shield"
        // }
    }
}
Sub-abilities (e.g. alchemist_unstable_concoction_throw, the throw sub-ability of Unstable Concoction) are intentionally commented out. Showing them on the pick screen would allow players to select a sub-ability without its parent, causing broken behaviour.

Real Snippet

The following is taken directly from the top of the main bracket:
"main"
{
    "morph_int_str_redux"                 "1"  // custom
    "morph_str_int_redux"                 "1"  // custom
    "morph_agi_int_redux"                 "1"  // custom
    "morph_int_agi_redux"                 "1"  // custom
    "keeper_of_the_light_innate_redux"    "1"  // custom
    "night_stalker_innate_redux"          "1"  // custom
    "skywrath_mage_concussive_break"      "1"  // custom

    "abaddon_aphotic_shield"              "1"
    "abaddon_borrowed_time"               "1"
    "abaddon_death_coil"                  "1"
    "abaddon_frostmourne"                 "1"
    "abyssal_underlord_atrophy_aura"      "1"
    "abyssal_underlord_dark_rift"         "1"
    "abyssal_underlord_firestorm"         "1"
    "abyssal_underlord_pit_of_malice"     "1"
    ...
}
Abilities marked // custom are Redux-specific Lua implementations. Unmarked abilities are standard Dota 2 abilities that work as-is.

Adding an Ability

  1. Define the ability — either add a KV entry to npc_abilities_custom.txt (for a Lua-backed ability) or confirm it already exists in the base game.
  2. Add the line to the appropriate bracket in abilities.kv:
    "my_new_ability"    "1"
    
  3. Comment out sub-abilities if your ability spawns sub-abilities that should not be independently selectable.
  4. Restart the server (or reload KVs via the dev console) so the updated file is loaded.
If an ability crashes the server or has known bugs, comment it out with a descriptive note rather than deleting the line — this makes it easy to re-enable once the bug is fixed.

Build docs developers (and LLMs) love