Guide

Game trade clash and attack priority systems explained

Harbor Brawl's closed beta had a footsies problem: two players pressed medium punch at the same time, both characters flinched, and chat filled with “how did I lose that?” The collision layer used a simple rule — first registered hitbox wins, second attack whiffs — but rollback netcode reordered frames by one tick depending on ping. Identical inputs produced opposite outcomes. Ranked neutral win rate for the slower archetype collapsed 8 points because their pokes were one frame longer in startup, not because players chose wrong buttons.

A trade happens when two attacks connect on the same frame or within a designer-defined trade window — both fighters take damage and enter hitstun instead of one side cleanly winning. Attack priority decides asymmetric outcomes: heavies beating lights, anti-airs beating jump-ins, or dedicated clash boxes that cancel both moves with a spark effect. This is distinct from projectile clash (fireball wars) and from counter-hits (hitting during startup). After Harbor rebuilt neutral around explicit trade windows, priority tiers, and symmetric trade damage, ranked rage-quits in footsies-heavy matchups fell 19%. This guide covers trade taxonomy, simultaneous hit resolution, priority and clash volumes, frame data implications, the Harbor Brawl refactor, a technique decision table, pitfalls, and a production checklist.

What trades and clashes are

In neutral, players probe with pokes whose active frames overlap. When both hitboxes connect with defender hurtboxes on the same simulation frame (or within a trade tolerance of 1–2 frames), the engine must pick an outcome:

  • Full trade — both attacks land; both take damage and hitstun; neither player had frame advantage before the exchange.
  • Priority win — one attack is designated higher priority; it lands, the other is cancelled or absorbed.
  • Clash cancel — both attacks stop at clash volumes; characters reset to neutral or a brief recoil animation.
  • First-hit wins — legacy pattern; only the earlier processed hit registers. Avoid in rollback fighters unless deterministic.

Trades are a deliberate design tool: they let slower, higher-damage buttons contest fast jabs without requiring impossible frame advantage. Without trade rules, neutral devolves into who pressed first — latency becomes the game.

Trade windows and simultaneous hit detection

Engines typically scan active hitboxes each frame. When attack A and attack B both overlap opposing hurtboxes, record a trade candidate if:

  • Both moves are in active frames (not recovery-only).
  • Neither defender was already in blockstun from a prior hit in the string (unless trade-into-block is authored).
  • At least one move has a tradeable flag or belongs to a tradeable tier (usually normals and some specials, not throws).

A trade window of ±1 frame means hits on frame N and N+1 still resolve as a trade. Wider windows feel forgiving online; zero window demands frame-perfect simultaneity and rarely triggers. Log trade events with frame IDs, move IDs, and both players' advantage going in — essential for balance patches.

For rollback netcode, trade resolution must be a pure function of confirmed inputs and frame state, not packet arrival order. Compute both hits, then apply trade rules in a fixed order (e.g. lower player slot first) only for tie-breaks, not for denying the second hit.

Priority tiers and asymmetric trades

Many fighters assign each move a priority level used only when hitboxes overlap during active frames:

  • Level 0 (low) — jabs, fast pokes; lose to most trades but win on speed via range and startup, not priority.
  • Level 1 (mid) — standard normals; trade evenly with each other.
  • Level 2 (high) — heavies, reversals, anti-airs; beat level 0–1 on the same frame.
  • Level 3 (super) — invulnerable or armor-assisted moves; see super armor for full rules.

When priorities differ, the higher level lands and the lower is cancelled (or deals reduced trade damage — e.g. 30% of base). When equal, full trade. Anti-air priority is a common special case: jump-in attacks often carry low air priority while grounded anti-airs carry high priority on frames 3–8 of active, rewarding correct timing without a hard invuln window.

Document priority in movelists alongside startup and damage. Players should know their heavy is “trade wins vs lights” before labbing matchups.

Clash boxes vs hurtboxes

Some games add clash boxes — thin volumes on weapons or limbs that interact with other clash boxes before hurtbox contact. When two clash boxes overlap:

  • Both attacks cancel into a clash VFX and brief recoil (neutral reset).
  • Or one priority wins and pierces through (clash box on loser disabled).
  • Or both deal reduced chip to each other (weapon clash without body contact).

Clash boxes create readable “sword meet” moments without both characters eating full damage. They pair well with parry systems: clash on weapons, full hit on failed parry timing. Separate clash layers from hurtboxes in your collision matrix so debug draws can toggle each.

Trade damage, stun, and neutral outcomes

Full trades usually apply:

  • 100% damage to both (symmetric) or scaled trade damage (e.g. 80% on both to reduce poke wars).
  • Hitstun per move's normal values — whoever recovers first has advantage after the trade.
  • Pushback on both characters to reset spacing.

After a trade, compute frame advantage the same way as any hit: compare each attacker's remaining recovery to each defender's hitstun. Often both are negative on block equivalent — neutral resets. If one move has longer recovery, the other player can “win the trade” with a follow-up even though both took damage. Surface “trade plus” in training mode when your recovery ends 4+ frames before the opponent's.

Trade into counter: if one player's move was in startup when hit, apply counter-hit bonus stun to the defender only — do not double-count as both trade and counter unless authored. Pick one rule and stick to it.

Normals vs projectiles vs throws

Trade rules rarely apply uniformly:

  • Normals vs normals — full trade or priority tier rules.
  • Normals vs projectiles — often use projectile priority tables (see projectile clash guide); some normals absorb one hit of a fireball.
  • Throws vs attacks — throws typically win on overlapping active frames if the defender isn't in throw-invuln or airborne; not a damage trade.
  • Command grabs — beat strikes on specific frames via super armor or invuln; document separately from footsie trades.

Mixing systems without clear UI produces the beta complaint: “my fist went through his fireball once.” Tag every move with collision class in data.

Harbor Brawl neutral refactor

Harbor Brawl's trade pass replaced first-hit-wins with explicit rules:

  • Trade window set to ±1 frame at 60 Hz for all tradeable normals.
  • Priority tiers on every strike: lights 0, mediums 1, heavies 2, reversal anti-airs 2 with +2 active priority vs airborne targets.
  • Symmetric trade damage at 85% for same-tier trades; loser in priority mismatch takes full damage, winner 70%.
  • Clash boxes on weapon meshes for sword characters; fist fighters use hurtbox-only trades.
  • Training mode trade log: last 10 exchanges with frame numbers, priority outcome, and post-trade advantage.
  • Rollback tie-break: lower character ID processes first only when priorities and tiers are identical — documented in patch notes.

Post-patch: simultaneous medium exchanges resolved identically in replay across 120 ms RTT tests; ranked footsies rage-quit rate dropped 19%; average neutral length increased 0.4 seconds as players trusted trades to contest pokes.

Technique decision table

Approach Best when Weak when
Symmetric full trades (both hit, full damage) Footsies fighters, honest neutral, teaching frame literacy Poke-heavy games where chip wars feel tedious
Priority tiers (heavy beats light) Slower characters need comeback tools; clear risk-reward on buttons Players perceive heavies as “unfair” without training
Clash box cancel (weapons meet, no damage) Weapon fighters, readable neutral resets, spectacle Fist fighters without visual clash feedback
First-hit-wins collision Single-player action, offline-only, simple brawlers Rollback online fighters; latency unfairness
Scaled trade damage (80% both sides) Reduce poke war attrition while keeping trade identity Players expect full damage from clean-looking hits
No trades (one hit always wins) Reaction-heavy games with very short active frames Neutral feels like coin flips online; excludes slower archetypes

Pitfalls

  • First-hit-wins under rollback. Packet order decides outcomes; players blame netcode correctly.
  • Priority without movelist docs. Hidden tiers feel random; publish priority level per move.
  • Trades on blocked hits. Blockstun should not trigger trade resolution with a third hit; define string scope.
  • Throw overlap ambiguity. Throws and strikes on same frame need a single authoritative rule.
  • Ignoring post-trade advantage. Both took damage but one player is plus — UI silence hides the real winner.
  • Clash boxes larger than hurtboxes. Weapons clash from empty air; players distrust spacing.
  • Trade damage plus counter-hit double dip. Pick one bonus system per exchange.
  • Projectile rules mixed into normal trade code. Split collision handlers; cross-link in docs only.

Production checklist

  • Define tradeable move classes (normals yes, throws no, specials per-move).
  • Set trade window width (typically 0–2 frames) and document in engine constants.
  • Assign priority tier to every strike; expose in movelist and training overlay.
  • Implement symmetric vs asymmetric trade damage policy; log which applied.
  • Separate clash box, hitbox, and hurtbox layers in collision matrix.
  • Resolve simultaneous hits before applying first-hit-wins anywhere else.
  • Make rollback trade resolution deterministic; test at 2–8 frame input delay.
  • Compute and display post-trade frame advantage in training mode.
  • Tag anti-air and reversal priority exceptions in move data.
  • Route projectile-vs-normal to projectile priority table, not footsie trades.
  • Record trade telemetry: tier, outcome, damage dealt, advantage after.
  • Playtest footsies matchups with equal-skill bots pressing same frame.

Key takeaways

  • Trades are authored outcomes for simultaneous hits — not accidents of collision order.
  • Priority tiers let slow heavies contest fast lights without impossible frame data.
  • Rollback fighters need deterministic trade rules; first-hit-wins is a neutrality bug online.
  • Post-trade frame advantage — not just damage — tells players who won the exchange.
  • Harbor Brawl cut ranked rage-quits 19% by replacing opaque collision with trade windows, tiers, and training logs.

Related reading