antipattern

Use when

Playtest data or your own play shows convergence on a single strategy.

What it is. Your option space has one right answer. The correct move is knowable in advance, so play stops being a decision and becomes recall. Mastery = reading the tier list, not reading the board.

Why it hurts. A game’s depth is the number of live choices per moment. When one build wins everywhere, every other option is a trap and every match is the same match. Discovery dies, expression dies, replay dies. Worse: the player who copies the wiki beats the player who thinks — you punished engagement.

The smell

There is an S-tier answer to every situation, and it isn’t situational. The optimal loadout is a constant, not a function of the state you’re in.

How it happens

CauseWhat it looks like
Unconditional payoffsAn option is strong in all contexts, so nothing ever beats it. No rock-paper-scissors, only rock.
Free powerThe best pick has no opportunity cost — you’d take it even if it were second-best, because it costs nothing to slot.
Flat cost curvesStrong and weak options cost the same. Price never taxes strength, so strength is always correct.
A degenerate comboTwo pieces multiply instead of add; the loop scales faster than any counter can. See antipattern-power-creep.
No answers existYou shipped a threat but never shipped the check for it. The metagame can’t self-correct because the tools aren’t in the box.

Note the shape: this is antipattern-fake-choice arrived at empirically. Fake choice ships options that are obviously junk; a solved metagame ships options that looked balanced until players did the math. The tell differs, the cure overlaps.

The tell (check YOUR design)

If two of these fire, you don’t have a balance nudge — you have a collapsed space. Treat convergence as data (system-build-diversity is the health metric), not opinion.

The fix

The cure is to make strength conditional — pay for it, counter it, or situate it. Reach for these systems:

LeverWhat it doesLink
Soft countersEvery strong line has a line that answers it — not a hard lock, a favorable trade. Counters exist in the box, so the meta self-corrects.system-counter-systems
Cost curvesPrice strength. A dominant effect that costs double stops being free; now it’s a real bet.system-economy, pattern-risk-reward
Situational payoffsMake the ceiling context-dependent. The build that wins vs. aggro loses vs. control. Now the choice is a read.pattern-meaningful-choice
Roster / archetype spreadShip options that want different states, so no single loadout covers the field.system-build-diversity, system-enemy-archetypes
Asymmetric matchupsLean into faction/kit identity so “best” is relative to who you face.system-faction-asymmetry

The design test: can you draw the counter-graph? Every top option should have an arrow pointing at it from something else that’s also viable. If the graph has a sink — a node nothing beats — that’s your solved build. Cut its floor, raise its cost, or ship its answer before handoff.

Twist seams

Seen in…

The pattern: competitive and PvP games treat convergence as a five-alarm fire; solo power-fantasy games can tolerate a settled meta if the loop’s pleasure isn’t optimization. Diagnose against your genre — see system-mastery-curve and pattern-mastery-and-flow for whether a stable “best” is a bug or a plateau you intended.

Verify / guard

Convergence is measurable, so measure it. Track pick-rate and win-rate by option across a batch of seeded runs; a spike past your threshold on either is the alarm. Because Hayao sims are deterministic (fixed-seed RNG), you can replay the same field against every build and read the counter-graph directly instead of guessing. Wire the check per system-build-diversity and gate it in docs/VERIFICATION.md before handoff — a design that can’t show a live spread of viable options hasn’t cleared this antipattern. Related failure modes to check alongside: antipattern-boring-optimal (the optimal is dull even when it’s not unique), antipattern-power-creep (the solve that arrives via inflation), antipattern-fake-choice (its symptom-level cousin).

This module rendersthe repo's markdowndirectly — edit it there, it changes here.