Events, Items & Account

Events

Look up how each game event works and what it gives. 65 events are included: 12 alliance, 36 solo, 12 rookie, and 5 holiday.

Every event has an id, a name, an img, a category, and a description. All other fields are optional, because events differ a lot in shape.


Type

GameEvent

FieldTypeDescription
idstringStable identifier
namestringDisplay name
imgstringPath to the event icon, relative to images/
categoryEventCategory'solo', 'alliance', 'rookie', or 'holiday'
descriptionstringWhat the event is
resultShapeGameEventResultShape?The form of result the event takes. Not set on the four Core events
scoreUnitstring?What scoreTotal counts, on events whose targets are not points
frequencystring?How often the event runs, as free text
durationstring?How long the event runs, as free text
scheduleEventSchedule?The same information as a rule, for a calendar
expertTiersGameEventExpertTier[]?Extra reward tiers added by expert skills
requirementsstring[]?What a player needs to take part
tiersGameEventTier[]?Ranking or milestone tiers, from lowest to highest
allianceRankingsGameEventRanking[]?Alliance rewards by placement
allianceRankingUpdatesGameEventRankingVersion[]?Later alliance reward lists that replace allianceRankings, in the order the game replaced them
personalRankingsGameEventRankingTable[]?Personal rewards by placement, one table for each thing a placement is based on
pointLevelsGameEventPointLevels?Reward levels that need both personal and alliance points
phasesGameEventPhase[]?Named phases of the event
daysGameEventDay[]?Per-day scoring and milestones. Also holds the separate versions of an event
wavesGameEventWave[]?Attack waves
zonesGameEventZone[]?Zones with their open days
missionsGameEventMission[]?Missions with base points
missionPointsLabelstring?Names the mission points when they are a currency
versionsGameEventVersion[]?Missions and tiers that differ by the age of the state
shopGameEventShopOffer[]?Shop offers with cost and limit
shopsGameEventShop[]?One shop for each group, such as each hero generation
shopCurrencyItemIdstring?The item id of the shop currency
shopCurrencyNamestring?The currency name, set only when the currency is not in items()
refreshesGameEventRefresh[]?Refresh costs with quality chances
heroByGenerationGameEventGenerationHero[]?The hero whose shards the event gives for each generation
rewardsGameEventReward[]?Rewards that do not belong to a tier or ranking
tipsstring[]?Tips for the event
eventBuffIdstring?The id of the matching row in Event buffs

GameEventReward

FieldTypeDescription
namestringReward name
itemIdstring?Id of an entry in Items
decorationIdstring?Set when the reward is a decoration and not an item
skinIdstring?Id of an entry in Skins
amountnumber?Amount given
notestring?Extra detail

GameEventTier

FieldTypeDescription
namestringTier name
notestring?Extra detail
scoreTotalnumber?Points needed. Left out until the value is known
rewardsGameEventReward[]?Tier-wide rewards
rankingsGameEventRanking[]?Per-placement rewards

GameEventRanking

FieldTypeDescription
groupRankingstringThe placement group, such as a rank range
starChangenumber?Star change for the placement. Negative on a loss
rewardsGameEventReward[]Rewards for the placement
levelsGameEventStageLevel[]?Enemy levels, on Mercenary Prestige rankings

GameEventScoringAction

Each entry of a GameEventDay scoring list is a scoring action.

FieldTypeDescription
actionstringWhat the player does
pointsnumberPoints the action gives
itemIdstring?Set when the action names one item that is in items()
itemIdsstring[]?Set when the action names a kind of item. Never set with itemId

EventSchedule

FieldTypeDescription
repeatEventRepeat?When the event comes back
runsEventRun[]?The runs of one cycle

EventRepeat has a kind of 'none', 'every', or 'weekly'. An 'every' repeat has every (a number) and unit ('hours', 'days', 'weeks', or 'months'). A 'weekly' repeat has weekdays.

EventRun has length and unit ('minutes', 'hours', or 'days'), plus an optional label, startWeekday, and startTimeUtc (HH:MM). Times are in UTC.

GameEventExpertTier

FieldTypeDescription
expertIdstringId of the expert, as in Experts
skillstringName of the expert skill
tiernumberThe extra tier, 1 to 3
unlockSkillLevelnumberSkill level at which the tier appears: 1, 6, or 10
thresholdsGameEventExpertTierThreshold[]?Points the tier needs, with the days the value is for
rewardsGameEventReward[]?Rewards of the tier

GameEventResultShape

resultShape has five values. Each one is derived from the data of the event, in this order.

ValueRuleEvents
wavesThe event has waves.1
tierA tier holds rankings.5
rankingThe event has personalRankings or allianceRankings.21
milestonesA tier has scoreTotal, or the event has pointLevels or missions.16
participationNone of the above. The data has no score or rank.18

GameEventRankingTableView

eventRankingTables() returns this shape.

FieldTypeDescription
idstringTable id, such as personal-1, alliance, alliance-update-1, or tier-1
scope'personal' | 'alliance'?Set when the event states it
namestring?Name of the tier or update the table comes from
basedOnstring?What a personal placement is based on
rankingsGameEventRanking[]The placements

Factory

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

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

Filters

MethodSignatureDescription
byCategorybyCategory(category: EventCategory)Filter to events of one category: solo, alliance, rookie, or holiday.
import { events } from 'whiteout-survival-data'

events().byCategory('alliance').count() // 12
events().byCategory('holiday').get() // Dreamscape Memory, Frosty Fortune, Romance Season, Vision of Dawn, Vault of Enigma

Terminal methods

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

Helper functions

FunctionReturnsDescription
eventRankingTables(event)GameEventRankingTableView[]Every ranking table of one event in one shape

The order of the tables is the personalRankings tables (personal-1 and on, with basedOn), the allianceRankings table (alliance), the allianceRankingUpdates lists (alliance-update-1 and on, with the name of the update), and the tiers that hold rankings (tier-1 and on, with the name of the tier). A tier table has a scope only when its name says personal or alliance. The star rating tiers of Alliance Showdown and the winner tier of SvS have none. The array is empty for an event with no ranking.


Schedule

frequency and duration are free text. schedule holds the same information as a rule, and it is set on 50 of the 65 events.

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

const bear = events().find('bear-hunt')
bear?.duration // '30 minutes'
bear?.schedule
// { repeat: { kind: 'every', every: 47.5, unit: 'hours' }, runs: [{ length: 30, unit: 'minutes' }] }

An event with two runs in a cycle has two entries in runs. Hall of Chief has Season 1 for 6 days and Season 2 for 7 days. Crazy Joe has a run on Tuesday and one on Thursday. Frostfire Mine has a run of 30 minutes for each of its seven time slots.

The schedule has no dates, because the game does not publish them. A repeat rule is set when the text gives an interval, such as "Weekly", "Every two weeks", "Once a month", or "Yearly" (12 months). A run is set when the text gives a length. Some events have a repeat rule and no run, or the other way around, when the text has only one of the two.

The SvS week follows the package owner: Preparation for 5 days from Monday, and a Battle of 12 hours from Saturday 10:00 UTC, repeating every four weeks. Canyon Clash follows the owner as well: voting on Monday and Tuesday, registration on Wednesday and Thursday, matchmaking on Friday, and the battle on Saturday.


A scoring action has an itemId when its text names one item that is in items(). Some actions name a kind of item and not one item. They are linked as follows.

Action textLink
Use 1 Rare, Epic, or Mythic Hero Shard (45 rows)itemId of the general shard of that rarity, such as mythic-general-hero-shard
Use Epic Recruitment 1 time (4 rows)itemId platinum-key. Advanced Recruitment uses gold-key
Use any 1 Expert Sigil, excluding Common (4 rows)itemIds, the 10 named sigils
Use 1m of Speedups for a type (65 rows)itemIds, the speedups of that type: construction, research, troop, or learning

The general speedups are not in the speedup lists, because the wording names the type. An action has an itemId or itemIds, never both.


Expert extra tiers

Three expert skills add reward tiers to an event: Baldur's Blazing Sunrise to Alliance Mobilization, Baldur's Dawn Hymn to Alliance Showdown, and Valeria's Well Prepared to the preparation phase of State of Power. Each skill adds up to three extra tiers, at skill levels 1, 6, and 10. The expertTiers list of these events has one entry for each extra tier. The extra tiers come after the normal milestone tiers.


Examples

import { eventRankingTables, events } from 'whiteout-survival-data'

// Alliance events
events().byCategory('alliance').count() // 12

// Read a nested list: the 20 waves of Crazy Joe
events().findByName('Crazy Joe')?.waves?.length // 20

// Events with a related event buff row
events()
  .get()
  .filter((e) => e.eventBuffId !== undefined)
  .map((e) => e.id)

// Every ranking table of an event in one shape
const tables = eventRankingTables(events().find('king-of-icefield')!)
tables.map((t) => `${t.id} ${t.scope}`)
// ['personal-1 personal', 'personal-2 personal', 'personal-3 personal', 'personal-4 personal']

Known gaps

Data that is not complete

eventBuffId equals the event id for ten events, and Sunfire Castle links to the row castle-battle.

Fifteen events have no schedule, because their text gives no usable one: Deadshot, Develop New Tech and its second version, Dreamscape Memory, Frostdragon Tyrant, Frosty Fortune, Home Beyond, Return to Tundra, Silver Shell Events, Stand of Arms, The Labyrinth, Trial Event, Tundra Album, Tundra Games, and Tundra Star.

The points that an expert extra tier needs are not published. The only value is the threshold of Dawn Hymn tier 1, 200,000 points on days 1 to 4 of Alliance Showdown. Every other threshold is left out.

Six events have resultShape milestones only because they list missions: Alliance Mobilization, Beast Whisperer, Flame and Fang, Symphony of Change, Vision of Dawn, and Wild Brawl. A different shape may fit them better.

Several rewards are incomplete. Image-only rewards are loaded only where they can be read, and rewards with no name are recorded as unidentified items. The Fishing Tournament leaderboard rewards (9 rank bands) have no amounts. Hall of Chief ranking lists show only the first ranks, and the season hero shard rewards of its total ranking have no amount. King of Icefield ranking tables hold only the first rows. The 13 "Use 1 Widget of any Hero Exclusive Gear" scoring rows have no item link, because items() has no widget items.

Silver Shell Events, Tundra Album, and Shining City Pack do not load their shops and packs. Tundra Trade Route truck rewards are random and are not listed. The Vision of Dawn version for the age before Fire Crystal has no scoreTotal on its Hope chests yet. The Alliance Mobilization 120% and 200% exclusive missions and its gem purchase missions are left out. Alliance Mobilization is set to once a month, as its text says, although it runs twice a month until about 13 weeks of state age.

Mercenary Prestige level tables keep two rows as printed, Champion's Nightmare level 50 and Epic Nightmare level 13, each with a note, because they look like typos.


Next steps

  • See Event buffs for which buff sources count in each game mode
  • Browse Items to resolve the itemId values used in rewards and scoring actions
  • Read Experts for the skills behind the expert extra tiers
  • Read the query builder guide for more filter patterns
Previous
Prestige buildings