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)
}
}