Guide

Game attack priority and trading systems explained

Harbor Brawl's closed beta flooded Discord with the same clip: two players pressed attack on the same frame, both took damage, and one player insisted their heavy slash “should have won.” Telemetry showed 23% of neutral exchanges ended in simultaneous hits, but the resolution code used three inconsistent rules — animation-layer priority for some normals, a flat light-beats-heavy table for others, and silent first-input-wins on wake-up mash. Support tickets tagged “random trades” averaged 41 per week. After a unified priority pipeline with published tier tables and trade VFX, confused-trade reports fell 62%; intentional trade reads in ranked play rose 34%.

Attack priority decides which move wins when active hitboxes overlap on the same simulation frame. Trading means both fighters take damage (or blockstun) instead of one move canceling the other. These systems shape whether neutral is a spacing game or a mash fest. This guide covers priority tiers, trade vs clash vs win-out, projectile and armor interactions, the Harbor Brawl refactor, a technique decision table versus counter-hit and super armor systems, pitfalls, and a production checklist — building on frame data fundamentals.

Why simultaneous hits need explicit rules

Every fighting game eventually faces the same collision: player A's active frames overlap player B's active frames on frame F. Without a deterministic rule, netcode rollback and replay tools desync. Designers choose among four outcomes:

  • Win-out — higher-priority move deals damage; loser enters hitstun and their attack is canceled.
  • Trade — both moves connect; both take damage or blockstun (possibly with reduced values).
  • Clank — both attacks whiff visually: no damage, both recover (common for same-strength normals in some arena fighters).
  • Armor override — super armor or invincibility ignores priority and absorbs or ignores the opposing hit.

The choice is not neutral. Win-out rewards commitment and move knowledge; trades reward risk on unsafe pokes; clanks reduce damage swing in mash situations. Mixing rules by move type without documenting them produces the “random trade” feeling Harbor Brawl suffered.

Priority tiers: strength, speed, and move-specific overrides

Most traditional fighters assign each move a priority level, often tied to button strength:

Tier Typical normals vs equal tier vs lower tier
Light (L) jab, short kick Trade or clank Usually loses win-out
Medium (M) standing punch, forward medium Trade or clank Beats L; loses to H
Heavy (H) slow slash, launcher Trade or clank Beats L and M
Special (S) meter moves, EX, supers Designer-defined Often beats normals; may trade with other S

Tier tables are a starting point, not the whole story. Designers override per move: a slow heavy with disjointed hitboxes might lose to a fast light if only the light's hurtbox is exposed; a command grab ignores strike priority entirely. Document overrides in the same sheet as startup and active frames.

Hitbox position vs abstract priority

Abstract priority (L/M/H) resolves same-frame trades before damage application. Spatial priority asks which hurtbox was struck first when active frames span multiple frames — a jab can trade on frame 3 even if a heavy wins on frame 2 because only the heavy was active early. Harbor Brawl moved to abstract priority for same-frame ties only; multi-frame overlaps use first-active-wins to match player intuition from spacing reads.

Trade damage, hitstun, and advantage on dual connect

When both moves connect in a trade, designers scale outcomes so neither player gets a free combo:

  • Full trade — both take 100% move damage and full hitstun; whoever recovers first has frame advantage (usually the faster move).
  • Reduced trade — both take 70–85% damage; hitstun shortened so neither can confirm.
  • Counter-trade bonus — if one side is in counter-hit state, only that side gets bonus damage (see punish counter for attacker-state flags).
  • Block trade — both blocked: both take chip and blockstun; guard meter may tick on both.

Trade scaling prevents infinite neutral loops: if jab-vs-jab always trades for equal advantage, players mash forever. Harbor Brawl applies 80% damage on mutual light trades and gives +2 frame advantage to the move with fewer active frames remaining — rewarding the player who started the exchange earlier in the active window.

Projectiles, assists, and clash layers

Projectiles add a second priority axis. Common patterns:

  • Projectile vs strike — projectile often wins if it hits the striker's hurtbox before the strike's active frames (spatial); otherwise strike destroys weak projectiles.
  • Projectile vs projectile — higher tier wins, or both destroy (see projectile clash systems).
  • Projectile vs super armor — armor absorbs hit; projectile may persist or dissipate per move data.

Tag-team and assist calls need explicit priority: does the assist hitbox share the point character's trade state, or resolve independently? Undefined assist priority is a top source of combo breaks in 3v3 fighters.

Same-frame resolution order (implementation)

A deterministic pipeline for frame F when hitboxes overlap:

  1. Collect all attack pairs with overlapping hurtbox/hitbox on F.
  2. Check invincibility and throw immunity — invincible targets skip strike resolution.
  3. Check super armor / hyper armor — armored side may ignore priority loss.
  4. Compare priority tiers; if unequal and rules say win-out, apply winner hit only.
  5. If equal tier or rules say trade, apply both hits with trade scaling.
  6. Evaluate counter-hit and punish-counter flags on each connecting hit.
  7. Apply hitstop, hitstun, and state transitions in consistent player order (e.g. P1 then P2) for tie-breaks that affect meter gain.

Rollback netcode must replay this order exactly from inputs. Never branch on render frame or animation blend weight. Harbor Brawl added a combat log entry TRADE_RESOLVE with priority tiers for tournament dispute review.

Harbor Brawl refactor: from three rules to one table

Before refactor:

  • Normals used hidden animation-layer priority (artists bumped layers without design review).
  • Specials used a flat “EX beats normal” flag unrelated to tier.
  • Wake-up used first-input-wins, contradicting tier tables elsewhere.

After refactor:

  • Every move has priority_tier (L/M/H/S) and trade_policy (trade, win-out, clank) in data.
  • Wake-up uses same tier rules; mash jab-vs-jab trades at 80% damage instead of random win-out.
  • Trade VFX: orange spark on mutual connect, white spark on win-out — distinct from counter-hit blue.
  • Training mode overlay shows tier icons on active frames.

Ranked neutral length (time between knockdowns) rose 8% because players extended spacing footwork instead of gambling on opaque priority. Trade-related support tickets dropped from 41/week to 16/week.

Technique decision table

Design goal Prefer priority / trade system Prefer alternative
Readable neutral with clear risk/reward L/M/H tiers + documented trade scaling First-active-wins only (harder to teach)
Reduce wake-up mash frustration Equal-tier trades on simultaneous lights Throw tech priority (see throw-break guide)
High-stakes commitment on slow moves Heavy win-out vs lights during active frames Full invincibility on reversals
Prevent projectile domination Strike destroys weak fireballs on trade Universal projectile clash with no winner
Armor characters without invisible wins Armor absorbs hit but does not flip priority tier Priority tier baked into armor moves (confusing)
Esports clarity Published tier table + combat log traces Hidden artist-driven layer priority

Common pitfalls

  • Hidden priority on animation layers. Artists must not be the source of truth; export tiers from design data.
  • Inconsistent wake-up rules. Mash situations need the same table as midscreen or players learn two games.
  • Trade into full combo. Mutual hits should not grant enough advantage to confirm unless one side is counter-hit.
  • Ignoring block trades. Chip and guard meter on dual block need explicit policy or pressure feels arbitrary.
  • Projectile strike order bugs. One-frame offsets change who wins; test on rollback with artificial latency.
  • Priority without feedback. Players cannot learn tiers they cannot see; use VFX, SFX, or training overlays.
  • Clank without recovery parity. If both clank, recovery frames should match or the faster character gets free pressure.

Production checklist

  • Assign priority_tier and trade_policy to every strike and projectile in the move database.
  • Document tier-vs-tier outcomes in a public or internal combat bible.
  • Define trade damage and hitstun scaling separate from normal hit values.
  • Specify projectile vs strike and projectile vs projectile resolution.
  • Run same-frame overlap tests for every character pair at neutral range.
  • Validate wake-up mash, jump-in vs anti-air trade, and assist overlap cases.
  • Integrate counter-hit and punish-counter evaluation after trade resolution.
  • Add distinct VFX for trade, win-out, and clank outcomes.
  • Expose priority tiers in training mode and frame data exports.
  • Log priority resolution in replay/combat trace for tournament support.
  • Verify deterministic order under rollback simulation (1000+ random trade seeds).
  • Playtest neutral length and mash rate after tier changes; adjust trade scaling if needed.

Key takeaways

  • Attack priority resolves same-frame hitbox overlaps; trading means both sides connect with scaled outcomes.
  • L/M/H tiers are the default, but per-move overrides and spatial first-active rules must be documented.
  • Harbor Brawl cut confused-trade reports 62% by replacing three inconsistent rules with one data-driven table.
  • Priority interacts with armor, projectiles, and counter-hit flags — resolve in a fixed pipeline order for netcode.
  • Teachability requires visible trade and win-out feedback, not hidden animation-layer hacks.

Related reading