Talent? Hah. That seems generous.
--Raven Lord
Example:
{
"id": "68",
"shortName": "malthael",
"attributeId": "MALT",
"name": "Malthael",
"icon": "malthael.png",
"role": "Assassin",
"type": "Melee",
"releaseDate": "2017-06-13",
"abilities": {
"Malthael": [
{
"name": "Soul Rip",
"description": "Extract the souls of nearby enemies afflicted by Reaper's Mark, dealing 100 (+4% per level) damage and healing Malthael for 25 (+4% per level) per target hit. Heroic targets heal Malthael for an additional 4% of the Hero's maximum Health.",
"hotkey": "Q",
"abilityId": "Malthael|Q1",
"cooldown": 2,
"manaCost": 25,
"icon": "storm_ui_icon_malthael_soulrip.png",
"type": "basic"
},
...
{
"name": "Tormented Souls",
"description": "Unleash a torrent of souls, continually applying Reaper's Mark to nearby enemies for 4 seconds.",
"hotkey": "R",
"abilityId": "Malthael|R1",
"cooldown": 80,
"manaCost": 100,
"icon": "storm_ui_icon_malthael_tormentedsoul.png",
"type": "heroic"
},
...
{
"name": "Reaper's Mark",
"description": "Basic Attacks cleave in an area in front of Malthael and afflict non-Structure targets with Reaper's Mark for 4 seconds. Marked enemies are revealed and take damage equal to 1.75% of their maximum Health every 1 second.",
"trait": true,
"abilityId": "Malthael|D1",
"icon": "storm_ui_icon_malthael_reapersmark.png",
"type": "trait"
}
]
},
"talents": {
"1": [
{
"tooltipId": "MalthaelDeathsReach",
"talentTreeId": "MalthaelDeathsReach",
"name": "Death's Reach",
"description": "Increase Wraith Strike's range by 35%.",
"icon": "storm_ui_icon_malthael_wraithstrike.png",
"type": "W",
"sort": 1,
"abilityId": "Malthael|W1",
"abilityLinks": [
"Malthael|W1"
]
},
{
"tooltipId": "MalthaelOnAPaleHorse",
"talentTreeId": "MalthaelOnAPaleHorse",
"name": "On a Pale Horse",
"description": "Gain an additional 20% Movement Speed while mounted.",
"icon": "storm_ui_icon_malthael_onpalehorse.png",
"type": "Passive",
"sort": 2,
"abilityId": "_stormhero|Z1",
"abilityLinks": [
"_stormhero|Z1"
]
},
{
"tooltipId": "MalthaelFearTheReaper",
"talentTreeId": "MalthaelFearTheReaper",
"name": "Fear the Reaper",
"description": "Activate to increase Movement Speed by 25% and pass through other units for 4 seconds.",
"icon": "storm_ui_icon_malthael_fearthereaper.png",
"type": "Active",
"sort": 3,
"cooldown": 25,
"abilityId": "Malthael|Active"
}
],
"4": [
...
]
...
}
shortName
is the hero's name with periods, dashes, apostrophes, spaces, and capitalization removed; it is currently used as the name of a hero's JSON file and imagemanaCost
is a string due to several Heroes (Azmodan, Arthas, etc.) having channeled abilities with per-second mana costsabilityId
can be used to link a talent to its related ability.- Talents that create a new ability will have
abilityId
ofHeroName|Active
. Ex: Fear the Reaper (seen above), Bolt of the Storm - Talents granting changes to Basic Attacks or other passive effects will have
abilityId
ofHeroName|Passive
. Ex: On a Pale Horse (above), Burning Rage, Executioner
- Talents that create a new ability will have
talentTreeId
is the name of the talent as used in replay filessort
indicates the order of talents on that level/tiericon
is the image name for the talent from game files
- heroes/ and images/ contain curated versions of the game data and icons, prepared by heroes-convert
- Unprocessed versions of the parsed game data is hosted at heroes-data
- Uncompressed versions of the icons are hosted at heroes-images
- Game data extractions for both of the repos above are acquired using koliva8245's HeroesDataParser
See the Contributing docs for more information on our process.
- HeroesPatchNotes.com
- HeroesInfoBot on reddit's /r/heroesofthestorm
- HotsApi
- Hots-Info-Bot discord chatbot
npm install --save git+https://[email protected]/heroespatchnotes/heroes-talents.git
heroes-talents includes basic support for loading hero data into your project. See dist/test.js for an example, or dist/index.js for the source.
const HeroesTalents = require('heroes-talents')
async function test() {
try {
const heroes = await HeroesTalents.loadHeroJSONFiles()
const favoriteHero = heroes.alarak
console.log(`My favorite hero is ${favoriteHero.name}. He is an ${favoriteHero.role}.`)
} catch(err) {
console.log(err)
}
}
![](images/heroes/abathur.png)
![](images/heroes/alarak.png)
![](images/heroes/alexstrasza.png)
![](images/heroes/ana.png)
![](images/heroes/anduin.png)
![](images/heroes/anubarak.png)
![](images/heroes/artanis.png)
![](images/heroes/arthas.png)
![](images/heroes/auriel.png)
![](images/heroes/azmodan.png)
![](images/heroes/blaze.png)
![](images/heroes/brightwing.png)
![](images/heroes/thebutcher.png)
![](images/heroes/cassia.png)
![](images/heroes/chen.png)
![](images/heroes/chogall.png)
![](images/heroes/chromie.png)
![](images/heroes/deathwing.png)
![](images/heroes/deckard.png)
![](images/heroes/dehaka.png)
![](images/heroes/diablo.png)
![](images/heroes/dva.png)
![](images/heroes/etc.png)
![](images/heroes/falstad.png)
![](images/heroes/fenix.png)
![](images/heroes/gall.png)
![](images/heroes/garrosh.png)
![](images/heroes/gazlowe.png)
![](images/heroes/genji.png)
![](images/heroes/greymane.png)
![](images/heroes/guldan.png)
![](images/heroes/hanzo.png)
![](images/heroes/hogger.png)
![](images/heroes/illidan.png)
![](images/heroes/imperius.png)
![](images/heroes/jaina.png)
![](images/heroes/johanna.png)
![](images/heroes/junkrat.png)
![](images/heroes/kaelthas.png)
![](images/heroes/kelthuzad.png)
![](images/heroes/kerrigan.png)
![](images/heroes/kharazim.png)
![](images/heroes/leoric.png)
![](images/heroes/lili.png)
![](images/heroes/liming.png)
![](images/heroes/lostvikings.png)
![](images/heroes/ltmorales.png)
![](images/heroes/lucio.png)
![](images/heroes/lunara.png)
![](images/heroes/maiev.png)
![](images/heroes/malfurion.png)
![](images/heroes/malganis.png)
![](images/heroes/malthael.png)
![](images/heroes/medivh.png)
![](images/heroes/mei.png)
![](images/heroes/mephisto.png)
![](images/heroes/muradin.png)
![](images/heroes/murky.png)
![](images/heroes/nazeebo.png)
![](images/heroes/nova.png)
![](images/heroes/orphea.png)
![](images/heroes/probius.png)
![](images/heroes/qhira.png)
![](images/heroes/ragnaros.png)
![](images/heroes/raynor.png)
![](images/heroes/rehgar.png)
![](images/heroes/rexxar.png)
![](images/heroes/samuro.png)
![](images/heroes/sgthammer.png)
![](images/heroes/sonya.png)
![](images/heroes/stitches.png)
![](images/heroes/stukov.png)
![](images/heroes/sylvanas.png)
![](images/heroes/tassadar.png)
![](images/heroes/thrall.png)
![](images/heroes/tracer.png)
![](images/heroes/tychus.png)
![](images/heroes/tyrael.png)
![](images/heroes/tyrande.png)
![](images/heroes/uther.png)
![](images/heroes/valeera.png)
![](images/heroes/valla.png)
![](images/heroes/varian.png)
![](images/heroes/whitemane.png)
![](images/heroes/xul.png)
![](images/heroes/yrel.png)
![](images/heroes/zagara.png)
![](images/heroes/zarya.png)
![](images/heroes/zeratul.png)
![](images/heroes/zuljin.png)