Adds a persistent meta-progression layer stored on GameState.meta and serialized via SaveSystem.SaveMeta / LoadMeta.

Currency:

  • Single “unlock token” earned from runs. Died after clearing >=1 act = +1; full run = +2. Nightmare +1 bonus, Hell +2. First-time class+difficulty completion = +1 extra.

Unlocks:

  • Individual card / gear / event unlocks tracked in string lists.
  • Build paths derive from unlocks: 3+ unlocked cards on a path makes it available for specialization rewards.
  • IsCardPoolEligible enforces BOTH individual unlock AND the 3-card path threshold so a lone unlocked poison card doesn’t trickle into reward pools.

UnlockPickerUI:

  • System picks a random type with remaining items, drafts 3 random locked items, player picks 1 for 1 token. Skip / Close options.

Difficulty:

  • Auto-unlock only: full run on Normal unlocks Nightmare, full run on Nightmare unlocks Hell. Achievement popup (DifficultyUnlockPopup) queues on main menu.

GameFlowManager pipes through RecordRunStarted / RecordRunEnded for both full-run and defeat paths. NodeMapManager’s run-complete path routed through the same helper for consistency.


Commit e4e74b6 by astafford8488.