Heroes & Experts

Heroes

All 65 heroes released so far, with stats, skills, shard costs, and level power. Look up a hero, list heroes by rarity or class, or estimate a hero's stats at a lower star.


Types

Hero

FieldTypeDescription
idstringStable identifier
namestringDisplay name
imgstringPath to the hero's portrait
shardImgstring?Path to the shard icon. Set for 13 heroes
powerAtStarZeronumber?Hero Power at star 0. Set only for heroes where it was read in the game
rarityHeroRarity'Rare', 'Epic', or 'Legendary'
classHeroClass'Infantry', 'Lancer', or 'Marksman'
subClassHeroSubClass'Growth' or 'Combat'
generationnumber0 for the pre-Legendary heroes, 1 to 17 for Legendary heroes
statsobjectLevel 80, 5-star stats: exploration and expedition
skillsHeroSkillsexploration[], expedition[], and an optional talent
exclusiveWeaponExclusiveWeapon?Legendary heroes only
shardCostsHeroShardTier[]5 stars of 6 tier costs, with total and cumulative power
shardSourcesstring[]Where the shards come from
levelsHeroLevel[]80 entries of furnaceLevelRequired, xpRequired, and cumulative power

stats.exploration is a HeroStats with flat attack, defense, and health. stats.expedition is a HeroExpeditionStats with attack and defense as percents.

HeroSkill

FieldTypeDescription
namestringSkill name
imgstringPath to the skill icon
descriptionstringDescription text with 5 slash-separated values
levelsHeroSkillLevel[]5 levels, matching the 5 values in the description

HeroSkillLevel

FieldTypeDescription
levelnumberSkill level from 1 to 5
manualsRequirednumberManuals needed. A Talent skill needs none, so it is 0
powerGainnumberPower the level adds. 0 for a Talent skill
starRequirednumberHero star needed to unlock the level. 0 for a Talent skill
effectsHeroSkillEffect[]The numbers of the description for this level, in text order

HeroSkillEffect

FieldTypeDescription
namestringWhat the number sets, such as Stamina Cost Reduction
amountnumberThe number of the skill text at this level
unitHeroSkillEffectUnit'percent', 'percentOfAttack', 'seconds', or 'number'

ExclusiveWeapon

FieldTypeDescription
namestringWeapon name
imgstringPath to the weapon icon
powernumberPower rating
statsExclusiveWeaponStatsexploration stats, plus expedition with lethality and health
skillsExclusiveWeaponSkill[]Two skills of { name, img, description, unlockLevel? }

HeroShardTier

FieldTypeDescription
starnumberStar from 1 to 5
tierCostsnumber[]Shards for each of the 6 tiers
totalnumberSum of the tier costs
powernumberTotal Power once this star is reached, not the gain of this star
tierPowernumber[]?Hero Power read in the game at each of the 6 tiers. Set only where read

HeroLevel

FieldTypeDescription
levelnumberHero level from 1 to 80
furnaceLevelRequirednumberFurnace level needed to reach the level
xpRequirednumberHero XP needed from the previous level. 0 at level 1
powernumberTotal Power once the level is reached

HeroStatEstimate

FieldTypeDescription
levelnumberAlways 80
starnumberThe star asked for
tiernumberThe tier asked for
estimatedbooleanfalse only at 5 stars, where the stats are the stored ones
explorationHeroStatsWhole-number attack, defense, and health
expeditionHeroExpeditionStatsattack and defense percents with 2 decimals

Factory

import { heroes } from 'whiteout-survival-data'

heroes() // all 65 heroes
heroes(source) // wrap a pre-filtered array

Filters

MethodSignatureDescription
byRaritybyRarity(rarity: HeroRarity)Heroes of one rarity: Rare, Epic, or Legendary
byClassbyClass(heroClass: HeroClass)Heroes of one class: Infantry, Lancer, or Marksman
import { heroes } from 'whiteout-survival-data'

heroes().byRarity('Legendary').byClass('Infantry').get() // 18 heroes

Terminal methods

MethodReturnsDescription
.get()Hero[]All results
.first()Hero | undefinedFirst result
.find(id)Hero | undefinedFind by id
.findByName(name)Hero | undefinedCase-insensitive exact name match
.search(query)Hero[]Case-insensitive partial name match
.count()numberNumber of results

Stat estimate

estimateHeroStats(hero, star, tier) estimates the stats of a hero at level 80 for a lower star. star is 0 to 5 and tier is 0 to 5 inside the star, as the in-game label star.tier (3.2 is star 3, tier 2). tier defaults to 0.

It returns level, star, tier, exploration, expedition, and estimated. Exploration stats are whole numbers. Expedition stats are percents with 2 decimals. At 5 stars estimated is false and the result is the stored stats. The tier must be 0 at 5 stars. A star or tier that is not a whole number in range throws a RangeError.

HERO_STAT_ESTIMATE exports the accepted ranges: { level: 80, maxStar: 5, maxTier: 5 }.

import {
  estimateHeroStats,
  HERO_STAT_ESTIMATE,
  heroes,
} from 'whiteout-survival-data'

const hector = heroes().findByName('Hector')!
hector.stats.exploration // { attack: 3780, defense: 4928, health: 73926 }

const threeStars = estimateHeroStats(hector, 3, 0)
threeStars.estimated // true
threeStars.exploration // { attack: 2125, defense: 2771, health: 41565 }

HERO_STAT_ESTIMATE // { level: 80, maxStar: 5, maxTier: 5 }

The formula scales the stats of a hero by the ratio of its own 5-star stats to a reference hero, grows the stat by a step for each star, and adds 14.7% of the star's step for each tier. The Exploration star growth is 1.376. The value is fitted to Hector at level 80, whose in-game stats at 3.0 are 2,130 attack, 2,765 defense, and 41,569 health. The estimate is within 0.3% of them.

Estimate only

The estimate has been checked only against Hector at 3.0 to 3.3. The 3.2 step is about 10% larger in the game than the formula gives. There is no data for other hero levels, so it covers level 80 only.


Examples

import { heroes } from 'whiteout-survival-data'

// Legendary Infantry heroes
heroes().byRarity('Legendary').byClass('Infantry').get()

// Look up by name
const hector = heroes().findByName('Hector')!
hector.stats.exploration // { attack: 3780, defense: 4928, health: 73926 }

// Read the numbers of one skill level without parsing text
const gina = heroes().find('gina')!
const skill = gina.skills.expedition.find(
  (s) => s.name === 'Endurance Training',
)!
skill.levels[1].effects // [{ name: 'Stamina Cost Reduction', amount: 12, unit: 'percent' }]

Notes

Roster

The data holds 65 heroes. Generation 0 has 13 pre-Legendary heroes (4 Rare, 9 Epic). Legendary Generations 1 to 17 have 52 heroes. Generation 1 has 4, because Jeronimo and Natalia are both Infantry. Every later generation has 1 Infantry, 1 Lancer, and 1 Marksman hero. New generations are added as they are released.

subClass is stored for each hero and not derived, because it does not follow a rule from rarity or class. Gina and Jasser are both Epic Marksman. Gina is Combat and Jasser is Growth.

Skills

Skills are grouped like the in-game skill tabs. Legendary heroes have 3 Exploration and 3 Expedition skills. Rare heroes have 2 and 2. Epic heroes have 3 Exploration and 2 Expedition skills. The Talent tab is empty for every Legendary hero except Jeronimo and Natalia, the Generation 1 Infantry heroes. skills.talent is undefined for every other hero.

Each skill has 5 levels. effects holds the numbers of the description for that level. It has one entry for each set of 5 numbers in the description, in the order of the text.

unitMeaning
percentA percent, such as 12 for 12%
percentOfAttackA multiple of the Attack of the hero, such as 210 for "Attack*210%"
secondsA time in seconds, such as the 0.5 of a stun of 0.5 seconds
numberA plain count, such as the 8 strikes before an effect

A skill with two sets, such as Incendiary Arrow of Gina, has two entries at every level, and no two entries of one skill have the same name. A name has no suffix when the skill grants or raises the stat, such as Attack, and ends in Reduction when it lowers one, such as Damage Taken Reduction. A qualifier in parentheses names the troop type or the target, such as Damage Dealt (Lancers). The names are the same at all 5 levels of a skill.

manualsRequired is 0 / 10 / 30 / 50 / 75 for levels 1 to 5 on every Exploration and Expedition skill. The Talent skill of Jeronimo and Natalia needs no Manuals, so it is 0 at every level.

starRequired is the hero star needed to unlock the skill level. It depends on the skill slot and not on the skill. A 1st Exploration skill unlocks its levels at stars 0/1/2/3/4. A 3rd Exploration skill or a 2nd Expedition skill needs stars 2/2/2/3/4.

powerGain is the same for every skill of a rarity, in every slot.

RarityLevel 1Level 2Level 3Level 4Level 5
Rare5402,0303,7806,42610,152
Epic7202,7075,0408,56813,536
Legendary9003,3806,30010,71016,920

Exclusive weapon

exclusiveWeapon is set on Legendary heroes only. It is also called the Special item. Its Expedition bonus uses lethality and health percents, a different stat pair than the Expedition stats of the hero. It also has a power rating and two skills. These skills do not scale over 5 levels. Each has one fixed effect that activates at unlockLevel. Most heroes state it as a "(Lv. N)" suffix. Some newer heroes omit it, so unlockLevel is not set for them.

The Widgets that each weapon level costs are in Hero widgets.

Shard costs and shard power

shardCosts has 5 stars of 6 tier costs for every hero. The tier costs are the same for every rarity, and so are the total values, which equal the sum of the tier costs of the star. Each star also has a power field. It is the total Power once the star is reached, not the gain of that star alone.

power is confirmed for Rare and Epic heroes and for every Legendary hero through Generation 4. Only the total Power at the maximum star is known. Each star's power is that total spread cumulatively by its share of the shards needed to reach the maximum star, on the assumption that every shard adds the same Power. The standard total is 1,065 shards. Cumulative Power for stars 1 to 5:

Rarity / heroStar 1Star 2Star 3Star 4Star 5 (max)
Rare4,22221,11169,667196,335449,670
Epic5,19725,98385,744241,643553,440
Molly / Zinman6,49632,479107,180302,054691,800
Natalia7,14535,727117,898332,259760,980
Jeronimo8,12040,599133,975377,567864,750
Generation 27,79538,975128,616362,464830,160
Generation 39,74448,718160,770453,0801,037,700
Generation 412,01760,086198,284558,7991,279,830

Hector, Norah, and Gwen (Generation 5) also have Hero Power read in the game, which is not part of the table above. powerAtStarZero is the Power at star 0 (22,200, twice the level 1 Power of 11,100). tierPower on stars 1 to 3 lists the Power at each of the six tiers, 1.1 to 3.6, ending at 449,772. Stars 4 and 5 are not read yet. These readings show that Power per tier is not spread evenly over the shards, so the cumulative power values above are a projection.

shardSources lists where the shards of each hero come from, for example ["VIP Packs"] or ["Hall of Heroes", "Daily Deals"]. It is empty for Ling Xue, the one Generation 0 hero with no listed sources.

shardImg is set for Gina, Molly, Zinman, Flint, Philly, Alonso, Logan, Reina, Gwen, Wu Ming, Gordon, Hendrik, and Magnus. The matching hero shard item in Items points to the same file.

Level power

levels is the 80-level Furnace, XP, and Power progression. furnaceLevelRequired is the Furnace level needed to reach the hero level. xpRequired is the Hero XP needed from the previous level, and it is 0 at level 1. Both are identical for every hero, regardless of rarity, class, or generation.

power is the total Power once the level is reached. It follows one shared 80-entry curve. The gain at level L is start * base[L] / 250 with integer division, and power is the running total of the gains. The base curve is the same for all heroes, and only the level 1 start differs. It is 3,250 for Rare and 4,000 for Epic. For Legendary Generations 1 to 5 it is 5,000, 6,000, 7,500, 9,250, and 11,100.

The values reproduce the known checkpoints for every covered rarity and generation. Rare levels 10, 40, and 80 give 9,945, 42,185, and 121,290. Legendary Generation 1 gives 15,300, 64,900, and 186,600.

Jeronimo is an exception to his generation. His start is 6,250 and not the 5,000 of Generation 1, so his level 80 total is 233,250 and not 186,600. The curve and the formula are the same.

Known gaps

Shard power is a 0 placeholder for Legendary Generations 5 to 17, because no maximum star Power is confirmed for them. The Generation 5 tierPower readings are a partial exception, as described above. The tier 3.4 reading of 352,258 does not fit the other readings, so 352,314 is stored until it is checked in the game.

Level power is a 0 placeholder for Legendary Generations 6 to 17, because no level 1 start value is known. The start values of Generations 3 to 5 are projected and are not measured in the game.

The Talent skill powerGain is a 0 placeholder. A star does gate the Talent skill, but the curve is not known, so starRequired is a 0 placeholder for Jeronimo and Natalia.


Next steps

Previous
Daybreak Island