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] === 0 encodes “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.ts barrel rather than a standalone module.
  • This ECONOMY block is the engine-side authoritative configuration. The data/ 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.