antipattern

Use when

You are about to add another resource type or premium currency.

What it is. The game has six kinds of money and the player can name what none of them does. Every new feature bolted on its own token, and the wallet became a HUD of orphaned counters.

Why it hurts. Currency is a promise: earn this, spend it there. When the map from earn → spend blurs, players hoard everything, spend nothing, and stop feeling the pull of a reward. A resource nobody can price is not a reward — it is clutter with a number on it. See system-economy for the sinks/faucets discipline this violates.

The smell

A resource whose spend the player can’t state without opening a menu. If “what’s this for?” needs a wiki, the currency has no job.

How it happens

The tell (check YOUR design)

Twist seams (X but Y)

The fix

One currency per decision horizon. A horizon is a distinct question the player answers with money: what do I buy this fight, what do I unlock this run, what do I keep forever. Give each horizon exactly one currency; merge the rest into it.

MoveFromTo
Merge same-horizongems + shards + dust, all spent in the meta shopone meta currency
Cut faucet-onlya counter that only risesa stat/score, off the wallet
Collapse premium tierssoft + hard + event + pass currenciesone earnable + at most one paid
Relabel non-money”energy” that gates playa cooldown, not a wallet slot

Guardrails while you cut:

Seen in…

Verify / guard

Design-time gate: enumerate currencies, write the one-sentence earn→spend for each, and count distinct decision horizons. Currencies > horizons means merge before handoff. Then prove the sinks/faucets balance and that no currency is faucet-only — the economy checks in system-economy, the wallet-readability check in system-inventory-and-ui, and the run-through in docs/VERIFICATION.md.

Before you add currency N+1, answer in one line: which horizon does it own that no existing currency owns? If you can’t, you’re not adding money — you’re adding spaghetti.

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