Skip to content
Contractsv1.7.0

Burst

⭐ Premium

The optional burst field requires an objective’s actions to arrive clustered: at least amount units within one trailing window of windowSeconds form one burst. amountRequired then counts completed bursts instead of raw actions. When the field is absent, every action counts individually.

Burst is the inverse of cooldown: cooldown ignores actions that come too fast, burst ignores actions that come too slow.

Like cooldown, burst is available on every amount-based objective (see the technical note on the Objectives overview).

{
"type": "Kill",
"title": "Double Tap",
"description": "Kill 2 scientists within 3 seconds of each other, 5 times.",
"amountRequired": 5,
"burst": { "amount": 2, "windowSeconds": 3 },
"conditions": {},
"entities": ["@scientists"]
}
Field Type Description
amount number (≥ 2) How many units of the underlying action form one burst. A value of 1 would change nothing and is rejected as a config error.
windowSeconds number (≥ 1) Length of the trailing window, in seconds. All amount units must land within one such span.

Set amountRequired: 1 for a single-cluster challenge, where the whole objective is one big burst:

  • “Harvest 30 corn in 10 seconds” = amountRequired: 1 + burst: { "amount": 30, "windowSeconds": 10 }
  • “Deal 10,000 damage in a day” = amountRequired: 1 + burst: { "amount": 10000, "windowSeconds": 86400 }

Each qualifying action becomes a timestamped candidate instead of counting immediately:

  • Candidates older than the trailing window expire silently: they never count, and no credited progress is ever taken back. Progress only moves forward, one whole burst at a time.
  • The moment the candidates inside the window reach amount units, one burst completes and amountRequired ticks by 1. Exactly amount units are consumed, oldest first.
  • Excess carries over. The leftover units of a large action stay as a candidate with their original timestamp and seed the next cluster. A third rapid kill after a 2-kill burst starts the next pair. A single 1,200-damage hit against amount: 500 fires 2 bursts (2 x 500) and carries 200 (1200 - 2 x 500 = 200).
  • Candidates are tracked per player, per objective. They survive server restarts and die with the player’s progress: abandoning the contract or losing it to a rotation clears them.

The window here is the same trailing (sliding) window as cooldown: it always covers the last windowSeconds from the current moment, with no fixed reset tick. The only difference is the direction of the trigger. Cooldown counts progress inside the window and blocks when it exceeds maxAmount, while burst counts candidates inside the window and fires a burst when they reach amount.

An objective can carry both a burst and a cooldown. Cooldown’s maxAmount shares amountRequired’s unit, so with a burst present it paces completed bursts: “kill 2 within 3 seconds, 5 times, at most 1 burst every 10 minutes” is a burst plus cooldown: { "maxAmount": 1, "windowSeconds": 600 }.

While candidates are pending, players get live feedback in both the contracts menu and the HUD: the sub-progress toward the next burst (e.g. 1/2) and a countdown to when the oldest candidate expires. When nothing is pending, no burst UI shows. The burst UI is also hidden while a cooldown on the same objective is blocking, since a burst completed during that time would be wasted. It reappears once the cooldown releases.

Windows shorter than the Hide Burst UI when window is below seconds config (default 10) never show burst UI, avoiding flicker on very short windows: the progress bar simply advances one whole burst at a time. Set the config to 0 to always show the burst UI.

  • Burst is a premium feature. On the Lite edition, a contract whose objective carries a burst is locked: it never enters a rotation, and its definition is preserved untouched for when you upgrade.
  • Burst is not a condition. Conditions filter when an action counts based on the state of the world at that instant, while burst shapes how actions must be grouped over time.