PURPOSE
Static configuration module exposing the ECONOMY constant — a single object literal holding gacha-pull pricing, pity thresholds, run-reward currency payouts, and dispatch-bay unlock costs. Pure data, no behavior.
OWNS
ECONOMY.PULL_COST: single-pull soft-currency cost.ECONOMY.TEN_PULL_COST: ten-pull soft-currency cost (discounted vs ten singles).ECONOMY.SOFT_PITY_START: pull index at which soft-pity rate boosting begins.ECONOMY.HARD_PITY: pull index at which a guaranteed top-rarity drop fires.ECONOMY.SOFT_PITY_RATE: per-pull rate increase added once soft-pity is active.ECONOMY.SPARK_THRESHOLD: spark/selector-currency total required to claim a featured unit directly.ECONOMY.SOLS_COMPLETE: sols (run reward currency) granted for completing a run.ECONOMY.SOLS_SURVIVED: sols granted for surviving but not completing.ECONOMY.SOLS_FAILED: sols granted for a failed run.ECONOMY.PERMANENT_FLOOR: minimum permanent-progress currency floor.ECONOMY.DISPATCH_BAY_COSTS: array of cumulative unlock costs for each dispatch bay slot ([0, 5000, 15000]— first bay free, then 5k, then 15k).
READS FROM
Nothing. No imports, no dependencies.
PUSHES TO
Nothing directly. The ECONOMY object is re-exported by engine/core/config/index.ts and is intended for consumption by gacha-pull, run-reward, and dispatch-bay systems. This file does not invoke any of them.
DOES NOT
- Implement pull resolution, pity tracking, or rate-up rolling.
- Compute or grant sols / permanent-progress rewards at run end.
- Hold runtime state (current pity counter, spark balance, owned bays).
- Define any currency identifiers, item pools, or rarity tables.
- Mutate any of its exported values.
Signals
None. Module emits no events and subscribes to none.
Entry points
Single named export const ECONOMY = { ... }. Importers reach in by property. No default export and no factory function. Re-exported from engine/core/config/index.ts as ECONOMY.
Pattern notes
- “Content in data tables, behavior in code” — pure constants file, deliberately small.
- All economy magic numbers (pull cost, pity thresholds, run payouts, dispatch unlock costs) live here so callers never inline literals.
DISPATCH_BAY_COSTS[0] === 0encodes “first slot free” as data rather than as a special case in unlock logic.SOFT_PITY_START(60) +HARD_PITY(80) +SOFT_PITY_RATE(0.05) together define the pity curve: from pull 60 onward, the top-rarity rate climbs by 5 percentage points per pull until pull 80 forces a guaranteed drop.- File name uses a leading underscore prefix, marking it as a config fragment intended for grouped import via the sibling
index.tsbarrel rather than a standalone module. - This
ECONOMYblock is the engine-side authoritative configuration. Thedata/layer (data/pull-config.ts,data/pull-rates.ts,data/economy.ts) defines a separate set of pull/pity constants used elsewhere; the two are not unified, and callers must pick the correct source for the system they touch.