Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,12 +39,14 @@
- Inheritance: KV entries inherit from `BaseClass` (vanilla or `*_datadriven`/`*_lua`). Tests compare our values to vanilla and allow differences only when the KV comment includes `OAA`. Example: `AbilityCooldown // OAA: changed`. This is only for when we change the levels that overlap with dota, OAA levels of abilities don't need the comment.
- Specials/Values: `AbilityValues` must preserve names, order, and base values vs. parent. New keys require an `OAA` comment. Item levels must keep specials consistent across levels.
- Icons: `AbilityTextureName` must be lowercase, no `.png`, and not start with `item_`. Resolved icon must exist in `game/resource/flash3/images/spellicons/` (abilities) or `.../items/` (items). Allowed exception: `item_recipe`.
- IDs/Costs/Recipes: Do not change vanilla `ID`. Non-vanilla items must have `ItemCost`. `ItemRequirements` are validated and must match parent unless commented `OAA`. Only one recipe per result; cost trees must be consistent.
- Costs/Recipes: Non-vanilla items must have `ItemCost`. `ItemRequirements` are validated and must match parent unless commented `OAA`. Only one recipe per result; cost trees must be consistent.
- Script hooks: If `ScriptFile` is set, it must exist under `game/scripts/vscripts/`.
- Heroes: Hero ability slots must match vanilla unless the comment references the original ability.
- Custom abilities/items: Custom content ends with `_oaa`. Updating KV keys for custom entries generally also requires updating the backing Lua logic referenced by `ScriptFile`. Do not “fix tests” by deleting or arbitrarily adding KV keys—align KV with Lua and with inheritance rules.
- MaxLevel does not need to match base dota.
- Only use `// OAA` sparingly to indicate intentional deviations from vanilla at vanilla levels. Generally avoid when possible.
- Do not rearrange the order of keyvalues and do not delete KV comments (text after `//`).
- If there is a word `intentionally` or `because` in the KV comment of keyvalue, do not change values.

## Commit & Pull Request Guidelines
- Commits: concise, present-tense summaries (e.g., "Fix Lua kv links"), reference issues/PRs (e.g., `(#1234)`).
Expand Down
6 changes: 3 additions & 3 deletions game/itembuilds/default_dragon_knight.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@
"item" "item_lesser_crit"
}

"#DOTA_Item_Build_Utility_Initiation" // always good, any facet
"#DOTA_Item_Build_Utility_Initiation" // always good
{
"item" "item_blink"
"item" "item_orchid"
}

"#DOTA_Item_Build_Physical_Core" // Standard dota carry Corrosive Dragon facet
"#DOTA_Item_Build_Physical_Core" // Standard dota carry
{
"item" "item_armlet"
"item" "item_black_king_bar_1"
Expand All @@ -33,7 +33,7 @@
"item" "item_devastator_oaa_2"
}

"#DOTA_Item_Build_Support_Core" // Fire or Frost Dragon facet
"#DOTA_Item_Build_Support_Core"
{
"item" "item_spirit_vessel_oaa"
"item" "item_shivas_guard"
Expand Down
2 changes: 1 addition & 1 deletion game/itembuilds/default_morphling.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"item" "item_greater_crit"
}

"#DOTA_Item_Build_Magical_Core" // Flow facet
"#DOTA_Item_Build_Magical_Core"
{
"item" "item_phylactery"
"item" "item_dagon_oaa_1"
Expand Down
9 changes: 0 additions & 9 deletions game/itembuilds/default_rubick.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,6 @@
"item" "item_wind_waker"
}

//"#DOTA_Item_Build_Rubick_Mix"
//{
//"item" "item_devastator"
//"item" "item_yasha_and_kaya"
//"item" "item_shivas_guard"
//"item" "item_greater_power_treads"
//"item" "item_dagger_of_moriah_1"
//}

"#DOTA_Item_Build_Magical_Core"
{
"item" "item_phylactery"
Expand Down
1 change: 0 additions & 1 deletion game/itembuilds/template.txt
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,6 @@
"item" "item_dragon_lance"
"item" "item_echo_sabre"
"item" "item_enrage_crystal_1"
"item" "item_eternal_shroud"
"item" "item_ethereal_blade"
"item" "item_far_sight"
"item" "item_force_staff"
Expand Down
18 changes: 6 additions & 12 deletions game/resource/English/ability/items/tooltip_abyssal_blade.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,12 @@
//=============================================================================
// Abyssal Blade
//=============================================================================
"DOTA_Tooltip_Ability_item_abyssal_blade" "Abyssal Blade"
"DOTA_Tooltip_Ability_item_recipe_abyssal_blade" "Abyssal Blade Recipe"
"DOTA_Tooltip_ability_item_abyssal_blade_Description" "<h1>Active: Overwhelm</h1> Stuns a target enemy unit for %stun_duration% seconds. <br><br>Pierces Debuff Immunity.\n\n<h1>Passive: Bash</h1> Grants melee heroes a %bash_chance_melee%%% chance on hit to stun the target for %bash_duration% seconds and deal %bonus_chance_damage% bonus physical damage. Bash chance for ranged heroes is %bash_chance_ranged%%%."
"DOTA_Tooltip_ability_item_abyssal_blade_Lore" "The lost blade of the Commander of the Abyss, this edge cuts into an enemy's soul."
// "DOTA_Tooltip_ability_item_abyssal_blade_Note0" "The stun is melee range."
"DOTA_Tooltip_ability_item_abyssal_blade_Note1" "Does not stack with other bashes, and does not grant bash to Clones and Tempest Doubles."
"DOTA_Tooltip_ability_item_abyssal_blade_Note2" "Multiple sources of damage block do not stack."
// "DOTA_Tooltip_ability_item_abyssal_blade_Note3" "The following heroes cannot trigger Bash on this item: Spirit Breaker, Faceless Void, Slardar, and Kez while in Sai mode."
"DOTA_Tooltip_ability_item_abyssal_blade_bonus_damage" "+$damage"
"DOTA_Tooltip_ability_item_abyssal_blade_slow_resistance" "%+Slow Resistance"
"DOTA_Tooltip_ability_item_abyssal_blade_hp_regen_amp" "%+Health Regen and Lifesteal Amp"
"DOTA_Tooltip_ability_item_abyssal_blade_bonus_strength" "+$str"
// "DOTA_Tooltip_Ability_item_abyssal_blade" "Abyssal Blade"
// "DOTA_Tooltip_Ability_item_recipe_abyssal_blade" "Abyssal Blade Recipe"
// "DOTA_Tooltip_ability_item_abyssal_blade_Description" "<h1>Active: Overwhelm</h1> Stuns a target enemy unit for %stun_duration% seconds. <br><br>Pierces Debuff Immunity.\n\n<h1>Passive: Bash</h1> Grants melee heroes a %bash_chance_melee%%% chance on hit to stun the target for %bash_duration% seconds and deal %bonus_chance_damage% bonus physical damage. Bash chance for ranged heroes is %bash_chance_ranged%%%."
// "DOTA_Tooltip_ability_item_abyssal_blade_Lore" "The lost blade of the Commander of the Abyss, this edge cuts into an enemy's soul."
// "DOTA_Tooltip_ability_item_abyssal_blade_Note1" "Does not stack with other bashes, and does not grant bash to Clones and Tempest Doubles."
// "DOTA_Tooltip_ability_item_abyssal_blade_Note2" "Multiple sources of damage block do not stack."

"DOTA_Tooltip_Ability_item_abyssal_blade_2" "#{DOTA_Tooltip_Ability_item_abyssal_blade}"
"DOTA_Tooltip_Ability_item_recipe_abyssal_blade_2" "#{DOTA_Tooltip_Ability_item_recipe_abyssal_blade}"
Expand Down
28 changes: 10 additions & 18 deletions game/resource/English/ability/items/tooltip_aeon_disk.txt
Original file line number Diff line number Diff line change
@@ -1,66 +1,58 @@
//====================================================
// Aeon Disk
//=====================================================
"DOTA_Tooltip_Ability_item_aeon_disk" "Aeon Disk"
"DOTA_Tooltip_Ability_item_recipe_aeon_disk" "Aeon Disk Recipe"
"DOTA_Tooltip_ability_item_aeon_disk_Description" "<h1>Passive: Combo Breaker</h1> When you take damage and your health falls below %health_threshold_pct%%%, a strong dispel is applied and you gain a %buff_duration% second buff that provides +%status_resistance%%% Status Resistance and causes all damage you deal and are dealt to be reduced to zero. Only triggers on player based damage.<br/><br/>Dispel Type: <span class=\"GameplayValues GameplayVariable\">Strong Dispel</span>" // Cooldown increases every time it triggers.
"DOTA_Tooltip_ability_item_aeon_disk_lore" "A powerful artifact long ago smuggled out of the Ivory Incubarium. Or so many believe."
"DOTA_Tooltip_ability_item_aeon_disk_bonus_health" "+$health"
"DOTA_Tooltip_ability_item_aeon_disk_bonus_mana" "+$mana"
"DOTA_Tooltip_ability_item_aeon_disk_cooldown_duration" "COOLDOWN:"

//"DOTA_Tooltip_modifier_item_aeon_disk_buff" "Combo Breaker"
//"DOTA_Tooltip_modifier_item_aeon_disk_buff_Description" "All incoming and outgoing damage negated."

"DOTA_Tooltip_Ability_item_aeon_disk_oaa_1" "#{DOTA_Tooltip_Ability_item_aeon_disk}"
"DOTA_Tooltip_Ability_item_recipe_aeon_disk_oaa_1" "#{DOTA_Tooltip_Ability_item_recipe_aeon_disk}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_1_Description" "#{DOTA_Tooltip_ability_item_aeon_disk_Description}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_1_Description" "<h1>Passive: Combo Breaker</h1> When you take damage and your health falls below %health_threshold_pct%%%, a strong dispel is applied and you gain a %buff_duration% second buff that provides +%status_resistance%%% Status Resistance and causes all damage you deal and are dealt to be reduced to zero. Only triggers on player based damage.<br/><br/>Dispel Type: <span class=\"GameplayValues GameplayVariable\">Strong Dispel</span>"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_1_lore" "#{DOTA_Tooltip_ability_item_aeon_disk_lore}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_health" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_health}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_mana" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_mana}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_health_regen" "+$hp_regen"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_mana_regen" "+$mana_regen"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_1_cooldown_tooltip" "#{DOTA_Tooltip_ability_item_aeon_disk_cooldown_duration}"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_1_cooldown_tooltip" "COOLDOWN:"

"DOTA_Tooltip_Ability_item_aeon_disk_oaa_2" "#{DOTA_Tooltip_Ability_item_aeon_disk}"
"DOTA_Tooltip_Ability_item_recipe_aeon_disk_oaa_2" "#{DOTA_Tooltip_Ability_item_recipe_aeon_disk}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_2_Description" "#{DOTA_Tooltip_ability_item_aeon_disk_Description}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_2_Description" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_Description}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_2_lore" "#{DOTA_Tooltip_ability_item_aeon_disk_lore}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_2_bonus_health" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_health}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_2_bonus_mana" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_mana}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_2_bonus_health_regen" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_health_regen}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_2_bonus_mana_regen" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_mana_regen}"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_2_cooldown_tooltip" "#{DOTA_Tooltip_ability_item_aeon_disk_cooldown_duration}"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_2_cooldown_tooltip" "#{DOTA_Tooltip_Ability_item_aeon_disk_oaa_1_cooldown_tooltip}"

"DOTA_Tooltip_Ability_item_aeon_disk_oaa_3" "#{DOTA_Tooltip_Ability_item_aeon_disk}"
"DOTA_Tooltip_Ability_item_recipe_aeon_disk_oaa_3" "#{DOTA_Tooltip_Ability_item_recipe_aeon_disk}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_3_Description" "#{DOTA_Tooltip_ability_item_aeon_disk_Description}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_3_Description" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_Description}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_3_lore" "#{DOTA_Tooltip_ability_item_aeon_disk_lore}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_3_bonus_health" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_health}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_3_bonus_mana" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_mana}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_3_bonus_health_regen" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_health_regen}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_3_bonus_mana_regen" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_mana_regen}"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_3_cooldown_tooltip" "#{DOTA_Tooltip_ability_item_aeon_disk_cooldown_duration}"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_3_cooldown_tooltip" "#{DOTA_Tooltip_Ability_item_aeon_disk_oaa_1_cooldown_tooltip}"

"DOTA_Tooltip_Ability_item_aeon_disk_oaa_4" "#{DOTA_Tooltip_Ability_item_aeon_disk}"
"DOTA_Tooltip_Ability_item_recipe_aeon_disk_oaa_4" "#{DOTA_Tooltip_Ability_item_recipe_aeon_disk}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_4_Description" "#{DOTA_Tooltip_ability_item_aeon_disk_Description}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_4_Description" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_Description}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_4_lore" "#{DOTA_Tooltip_ability_item_aeon_disk_lore}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_4_bonus_health" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_health}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_4_bonus_mana" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_mana}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_4_bonus_health_regen" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_health_regen}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_4_bonus_mana_regen" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_mana_regen}"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_4_cooldown_tooltip" "#{DOTA_Tooltip_ability_item_aeon_disk_cooldown_duration}"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_4_cooldown_tooltip" "#{DOTA_Tooltip_Ability_item_aeon_disk_oaa_1_cooldown_tooltip}"

"DOTA_Tooltip_Ability_item_aeon_disk_oaa_5" "#{DOTA_Tooltip_Ability_item_aeon_disk}"
"DOTA_Tooltip_Ability_item_recipe_aeon_disk_oaa_5" "#{DOTA_Tooltip_Ability_item_recipe_aeon_disk}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_5_Description" "#{DOTA_Tooltip_ability_item_aeon_disk_Description}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_5_Description" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_Description}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_5_lore" "#{DOTA_Tooltip_ability_item_aeon_disk_lore}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_5_bonus_health" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_health}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_5_bonus_mana" "#{DOTA_Tooltip_ability_item_aeon_disk_bonus_mana}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_5_bonus_health_regen" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_health_regen}"
"DOTA_Tooltip_ability_item_aeon_disk_oaa_5_bonus_mana_regen" "#{DOTA_Tooltip_ability_item_aeon_disk_oaa_1_bonus_mana_regen}"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_5_cooldown_tooltip" "#{DOTA_Tooltip_ability_item_aeon_disk_cooldown_duration}"
"DOTA_Tooltip_Ability_item_aeon_disk_oaa_5_cooldown_tooltip" "#{DOTA_Tooltip_Ability_item_aeon_disk_oaa_1_cooldown_tooltip}"

"DOTA_Tooltip_modifier_item_aeon_disk_oaa_buff" "#{DOTA_Tooltip_modifier_item_aeon_disk_buff}"
"DOTA_Tooltip_modifier_item_aeon_disk_oaa_buff_Description" "#{DOTA_Tooltip_modifier_item_aeon_disk_buff_Description}"
2 changes: 1 addition & 1 deletion game/resource/English/ability/items/tooltip_assault.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
//==============================================================
// Assault Cuirass
//==============================================================
"DOTA_Tooltip_Ability_item_assault_Description" "<h1>Passive: Assault Aura</h1> Grants %aura_attack_speed% attack speed and %aura_positive_armor% armor to nearby allied units, and decreases nearby enemy unit armor by %aura_negative_armor%.<br><br>Radius: %aura_radius%"
//"DOTA_Tooltip_Ability_item_assault_Description" "<h1>Passive: Assault Aura</h1> Grants %aura_attack_speed% attack speed and %aura_positive_armor% armor to nearby allied units, and decreases nearby enemy unit armor by %aura_negative_armor%.<br><br>Radius: %aura_radius%"

"DOTA_Tooltip_Ability_item_assault_2" "#{DOTA_Tooltip_Ability_item_assault}"
"DOTA_Tooltip_Ability_item_recipe_assault_2" "#{DOTA_Tooltip_Ability_item_recipe_assault}"
Expand Down
13 changes: 5 additions & 8 deletions game/resource/English/ability/items/tooltip_battlefury.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
//=============================================================================
// Battlefury
//=============================================================================
"DOTA_Tooltip_Ability_item_bfury" "Battle Fury"
"DOTA_Tooltip_Ability_item_recipe_bfury" "Battle Fury Recipe"
//"DOTA_Tooltip_Ability_item_bfury" "Battle Fury"
//"DOTA_Tooltip_Ability_item_recipe_bfury" "Battle Fury Recipe"
"DOTA_Tooltip_ability_item_bfury_Description" "<h1>Active: Chop Tree</h1> Destroy a target tree.<br><br>Cast Range: %abilitycastrange%\n<h1>Passive: Quell</h1> Increases attack damage against non-hero units by %quelling_bonus%. \n<h1>Passive: Cleave</h1> Deals %cleave_damage_percent%%% of attack damage as physical damage in a cone up to %cleave_distance% around the target. Deals %cleave_damage_percent_creep%%% against creeps. (Melee Only)"
"DOTA_Tooltip_ability_item_bfury_Lore" "The bearer of this mighty axe gains the ability to cut down swaths of enemies at once."
"DOTA_Tooltip_ability_item_bfury_Note0" "Cleave damage is reduced by armor value."
"DOTA_Tooltip_ability_item_bfury_Note1" "If multiple sources of Cleave are present, each Cleave's damage is applied separately."
"DOTA_Tooltip_ability_item_bfury_bonus_damage" "+$damage"
"DOTA_Tooltip_ability_item_bfury_bonus_health_regen" "+$hp_regen"
"DOTA_Tooltip_ability_item_bfury_bonus_mana_regen" "+$mana_regen"
//"DOTA_Tooltip_ability_item_bfury_Lore" "The bearer of this mighty axe gains the ability to cut down swaths of enemies at once."
//"DOTA_Tooltip_ability_item_bfury_Note0" "Cleave damage is reduced by armor value."
//"DOTA_Tooltip_ability_item_bfury_Note1" "If multiple sources of Cleave are present, each Cleave's damage is applied separately."

"DOTA_Tooltip_Ability_item_recipe_small_cleaver_oaa" "Small Cleaver Recipe"
"DOTA_Tooltip_Ability_item_small_cleaver_oaa" "Small Cleaver"
Expand Down
Loading