Heroes & Experts

Pets

The 14 pets tamed at the Beast Cage, each with one troop bonus skill and a level table. Read pet unlock rules, skill values, and the cost and bonus of each pet level.


Types

Pet

FieldTypeDescription
idstringStable identifier
namestringDisplay name
imgstringPath to the profile portrait
rarityPetRarity'Common', 'Uncommon', 'Rare', 'Epic', or 'Legendary'
maxLevelnumber50, 60, 70, 80, or 100, by rarity
maxRefinementPercentnumberMaximum refinement, such as 6.7 for Cave Hyena
unlockRequirementPetUnlockRequirementDays, and a Furnace level or a prerequisite pet
skillPetSkillThe single troop bonus skill
levelsPetLevel[]One row for each level

PetUnlockRequirement

FieldTypeDescription
daysRequirednumberDays since server start
furnaceLevelnumber?Furnace level needed. Set on the three earliest pets
prerequisitePetPetPrerequisitePet?Set on every later pet

PetPrerequisitePet has petId, name, and the level needed on that pet.

PetSkill

FieldTypeDescription
namestringSkill name
imgstringPath to the skill icon
descriptionstringDescription text
valuesnumber[]One value for each tier. Tiers are maxLevel / 10
durationSecondsnumber?Effect duration
cooldownSecondsnumber?Flat cooldown
cooldownSecondsByTiernumber[]?Cooldown for each tier, for skills whose cooldown shortens by tier

PetLevel

FieldTypeDescription
levelnumberPet level
petFoodCostnumberPet Food needed
troopAttackPetStatValueTroop Attack bonus
troopDefensePetStatValueTroop Defense bonus
troopsPowerPetStatValueTroops Power bonus
advancementMaterialsPetAdvancementMaterial[]?Items spent for the advancement, as { itemId, amount }
advancementScorenumber?Pet advancement score the advancement adds. Set only with advancementMaterials

PetStatValue is { value, refinedValue? }. refinedValue appears only at levels divisible by 10, the rows that also carry advancementMaterials.


Factory

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

pets() // all 14 pets
pets(source) // wrap a pre-filtered array

Filters

MethodSignatureDescription
byRaritybyRarity(rarity: PetRarity)Pets of one rarity: Common, Uncommon, Rare, Epic, or Legendary.

Terminal methods

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

Constants

PET_REFINEMENT_STATS lists the six stats that pet refinement rolls, with the statKey that research() and the other modules use for the same stat.

statstatKey
Infantry Lethalityinfantry-lethality
Infantry Healthinfantry-health
Lancer Lethalitylancer-lethality
Lancer Healthlancer-health
Marksman Lethalitymarksman-lethality
Marksman Healthmarksman-health

Examples

import { PET_REFINEMENT_STATS, pets } from 'whiteout-survival-data'

// The Legendary pets
pets().byRarity('Legendary').get() // 7 pets

// The six stats that pet refinement rolls
PET_REFINEMENT_STATS.map((s) => s.stat)
// ['Infantry Lethality', 'Infantry Health', 'Lancer Lethality', 'Lancer Health', 'Marksman Lethality', 'Marksman Health']

// What the first pets need to unlock
const hyena = pets().find('cave-hyena')
hyena?.unlockRequirement // { daysRequired: 54, furnaceLevel: 18 }

// The advancement score of the level 10 advancement
hyena?.levels[9].advancementScore // 500

Notes

Roster

There are 14 pets across 5 rarities: Common (1), Uncommon (2), Rare (2), Epic (2), and Legendary (7). Each pet's single skill scales in tiers of maxLevel / 10. These are the same every-10-levels milestones as the Advancement rows of the level table.

Unlock rules

unlockRequirement always has daysRequired, the days since server start. It also has either furnaceLevel or prerequisitePet. The three earliest pets need Furnace Lv.18. Every later pet needs a set level on the pet before it in one linear chain, not a chain split by rarity.

daysRequired follows the server timeline: day 54 for the first five pets, then 90, 140, 200, 280, and 370 for the later ones.

Levels

Each levels entry has troopAttack, troopDefense, and troopsPower as { value, refinedValue? } pairs. Troop Attack and Troop Defense are separate fields, but they are equal at every level of every pet in the roster.

A row with advancementMaterials also has advancementScore, the pet advancement score the advancement adds. SvS, Alliance Showdown, and King of Icefield count it. It depends only on the level, so it is the same for every pet.

Level102030405060708090100
Score5001,0002,0003,0004,5006,75010,00012,00014,50017,500

Skills

Most skills have a values array that scales with the effect's own percentage or flat number, such as the Construction Speed bonus of Cave Hyena, and a flat cooldownSeconds. Musk Ox and Giant Elk have a skill with no numeric effect to scale. Their cooldown shortens by tier instead. It is stored in cooldownSecondsByTier and copied into values, so the tier count matches every other pet.

Refinement

maxRefinementPercent is stored for each pet (Cave Hyena: 6.70). It is about 4/3 of the largest refined value in that pet's level table. The value is stored as given and not derived.

Refinement rolls bonus stats on a pet. A refinement rolls a new result that can be better or worse, refinement is irreversible, and a refinement after a quality increase does not drop the quality.

Known gaps

The package stores the maximum refinement of each pet. The percent range of each quality (None, Green, Blue, Purple, and Gold), the size of a step, and the Wild Mark cost of a roll are not stored.


Next steps

Previous
Experts