All guides

Build and train

The game

Ranged attacks

Shots, frostburst and repulsor: how each works, its timing and its counters.

Read as Markdown

Three weapons, each with its own cooldown and no ammo. All three are the attack part of a turn, and they fire the tick they are sent:

JSON
{"tick": 40, "attack": {"name": "ranged", "target": [9, 4]}}
{"tick": 41, "attack": {"name": "frostburst", "target": [12, 6]}}
{"tick": 42, "attack": {"name": "repulsor"}}
attackdamagecooldownwhat it does
ranged126A shot at any angle, 2 tiles a tick, with no range limit. Bounces once off a flat wall; a corner or a second wall stops it.
frostburst1414An instant spell on a visible tile within 7. A 3×3 area slows opponents inside it, then explodes 6 ticks after the cast.
repulsor512No aim: hits all eight tiles around you and shoves each opponent 3 tiles. Into a wall: a slam for 10 more and a 3-tick stun.

These are the shipped numbers. Read them from hello.rules.attacks rather than hard-coding them.

Firing

  • Fire on send. Every attack fires in the tick it is sent, after movement: projectiles launch and fly their first segment, frostburst creates its area and starts its fuse, and repulsors shove. Nothing is telegraphed, so a target that stepped off the line that tick escapes and one that stood still is hit.
  • Move and attack together. An attack can follow a move or a dash in the same turn and fires from where you end up: {"tick": 40, "move": "E", "attack": {"name": "ranged", "target": [9, 4]}}.
  • Chain weapons. Sending one attack puts only that attack on cooldown, and attacks have no recovery, so a different weapon can fire on the very next tick. A turn carries at most one attack.
  • Targets can be any tile except the one you end your movement on. Frostburst targets must also be visible, non-wall tiles within range, judged from where you end up; otherwise the attack is rejected as not_visible, blocked or out_of_range. Names must be entries in hello.rules.attacks; others are unknown_attack.
  • No friendly fire. Weapons never damage, slow or shove their shooter or teammates.
  • Defend by moving, dashing (invulnerable for its tick: shots pass through, blasts and repulsors miss) or using cover.

Standard shot: ranged

ONE BOUNCE: BANKING A SHOT AROUND COVER T +2 +4 +6 bounce 1 2 ricochet hit Speed 2 tiles a tick, no range limit. It reflects off its first flat wall (the map edge counts) and ends on a fighter or its second wall. WHEN A SHOT SENT ON TICK T LANDS, BY DISTANCE 1 T 1 away T 2 away T+1 3 away T+1 4 away T+2 5 away T+2 6 away T+3 7 away T+3 8 away T+4 9 away T+4 10 away Within 2 tiles a shot lands the tick it is sent: no warning, so keep moving when your opponent can fire. Further out it is in flight first, and observation.danger lists every tile it will hit and when.

The cheapest, fastest-cycling weapon. A shot flies the straight line from your tile's centre through the target tile's centre, and on past it. Aim at distant tiles (up to ±1000) for precise angles.

  • Speed 2, no range limit. It ends on the first fighter it hits, at a corner, or at its second wall.
  • One bounce. On its first flat-wall contact (the map edge counts), it reflects from the centre of the last open tile and continues along the mirrored line on the next tick. A hit after the bounce is a ricochet: the hit event carries "ricochet": true. The bounce shows in a projectile_bounce event, in later projectile observations and in danger.
  • The aim locks after movement, before repulsors resolve. If a repulsor pushes you on the tick you fire, the shot launches from where you land but keeps its direction, even if you land on the aim tile. It still fires and starts its cooldown. The projectile's target shifts with its origin to express the same direction; the attack event keeps the tile you asked for.

Frostburst: deny an area

T: CAST area appears, fuse 6 6 2 T+1: STEP slowed: next step in 4 6 2 T+5: STEP out of the area 2 2 T+6: BOOM out with a tick to spare −14 2 The 3×3 area slows opponents inside it (move cooldown +2) and explodes 6 ticks after the cast for 14 damage on every tile. The badge is areas[].ticks_left as you read it that tick. Easy to leave, impossible to cross; a dash also avoids the blast.

An instant spell with no flight time. Cast on tick T, its area exists from that tick and explodes on T+6.

  • The fuse. The observations for T+1 to T+6 show areas[].ticks_left of 6, 5, 4, 3, 2 and 1. A value of 1 means it explodes this tick, after movement.
  • The blast. Every tile in areas[].tiles, corners included, takes the full 14 damage. Walls and map edges are left out, and walls shield tiles behind them with the same line-of-sight test as shots. A dash avoids the blast. The area persists even if its caster dies.
  • The slow. From the tick after the cast until the blast, an opponent who starts a step inside the area pays areas[].slow (2) extra move cooldown: a step costs 4 ticks instead of 2. Leaving the square still costs the extra, since the tile you start on decides. Nothing lingers after the blast, dashes and attacks are unaffected, and where areas overlap the largest slow counts.

Why a 6-tick fuse: it denies an area, so there must be an easy way out but no way through. A fighter in the centre needs two slowed steps, the first on T+1 and the second on T+5, and is out one tick before the blast: it can afford one wasted tick, but not two. Crossing the square takes about 10 ticks, so nobody gets through it before it goes off.

Repulsor: punish anyone adjacent

SHOVE IN THE OPEN 1 2 −5, pushed 3 tiles straight away The gold ring is every tile it hits: no aim SLAM INTO A WALL 1 2 −5 −10 slam, stunned 3 ticks 15 damage, and the next shot can't miss

A point-blank burst with no aim. It covers the eight tiles around you (walls left out), measured from where you end your movement. Send it without a target; a target, if given, is ignored.

Every opponent in the ring takes 5 damage and is shoved 3 tiles straight away from you (the direction from you to its tile), one tile at a time:

the shove meetsresult
nothingpushed the full 3 tiles
a wall, or a wall corner a diagonal shove can't cut pasta slam: 10 more damage and stunned for 3 ticks (no moving, dashing or attacking)
another fightera collision: 5 damage to both
  • Timing. Repulsors resolve before shots launch and frostbursts are cast, so a fighter shoved this tick fires from where it lands. Movement resolves first, so stepping out of the ring on the tick it is sent escapes it. A dashing fighter is neither hit nor shoved.
  • The zone still hurts at the end of the tick, so a shove out of the zone costs the target too.
  • Events: repulse (the ring), hit, knockback (from, to), wall_slam, collision and stunned.

What you observe

  • danger lists every tile each visible opponent projectile and area will hit, and on which tick, including bounced shots. See the spec's Danger tiles, and frame data for timing and counters.
  • projectiles[] include attack, speed, origin, target, exact_pos and bounces_left.
  • areas[] include attack, owner, pos, damage, radius, slow, ticks_left and tiles. Your own projectiles and areas are visible too. area_spawn announces the explosion tick and area_explode reports its footprint.
  • Fighters expose slow_ticks_left: the ticks until the frostburst area they stand in explodes, or 0.

In the viewer

Every weapon effect is drawn in its owner's colour, and shape tells the weapons apart:

  • Shots leave a single trail; bounces and hits throw sparks.
  • Frostburst shows the cast, then the footprint with a countdown, then a blast flash, with a ring around fighters slowed in the square.
  • Repulsor flashes the ring around the fighter with an expanding wave; a shove leaves skid marks.

Each fighter's cooldowns (move, dash and the three weapons) are round icons in the arena's bottom corners and the side panel.

Achievements

Two event achievements reward these weapons: Bank Shot (a win over an approved house bot that includes a damaging ricochet) and Wall Breaker (a house win with a damaging repulsor wall slam). A bounced miss, or a repulsor hit without slam damage, doesn't count; both must happen in the qualifying win, within the event window. See event eligibility.