generated from nhcarrigan/template
6.7 KiB
6.7 KiB
Vampire Expansion — Implementation TODO
Branch: feat/expansions
Thematic currency names:
- Gold → Blood
- Essence → Ichor
- Crystals → Soul Shards
- Runestones → Bloodstones
- Echoes → Whispers
- Click action → Hunt
- Adventurers → Thralls
- Prestige → Siring (working name)
- Transcendence → The Awakening (working name)
- Apotheosis → Eternal Sovereignty (role ID: 1486144657023959180)
CDN prefix for all vampire art: https://cdn.nhcarrigan.com/elysium/vampire/<folder>/<id>.jpg
Local scratch dir (delete before committing): img/vampire/
Phase 1 — Types
- Add
VampireExpansionStateinterface topackages/types/src/interfaces/mirroring fullGameStatestructure (zones, bosses, quests, adventurers, upgrades, equipment, achievements, prestige, transcendence, apotheosis, exploration, resources, baseClickPower, lastTickAt, dailyChallenges, codex, autoQuest, autoBoss, autoAdventurer, companions, story) - Add
ExpansionsStateinterface:{ vampire?: VampireExpansionState } - Add
expansions?: ExpansionsStatefield toGameState - Export new types from
packages/types/src/index.ts
Phase 2 — Data files (vampire content)
All data files go in apps/api/src/data/vampire/.
Same content scale as base game; use vampire theming throughout.
zones.ts— 18 vampire-themed zones (crypts, blood forests, cursed castles, etc.)bosses.ts— 72 vampire-themed bosses (4 per zone)quests.ts— match base game quest count (~95); vampire-themed names/descriptionsadventurers.ts— 32 thrall tiers with progressive statsupgrades.ts— match base game upgrade count (~57); vampire-themedequipment.ts— match base game equipment count (~53); vampire-themed setsequipmentSets.ts— vampire equipment setsachievements.ts— match base game count (~40); vampire-themed conditionsexplorations.ts— 72 areas across 18 vampire lore zonesmaterials.ts— match base game material count (~54); vampire-themedrecipes.ts— match base game recipe count (~36); vampire-themedprestigeUpgrades.ts— 25 "Siring" upgradestranscendenceUpgrades.ts— 15 "Awakening" upgradesdailyChallenges.ts— 10 vampire daily challengesinitialState.ts—initialVampireState()function mirroringinitialGameStatestructure
Phase 3 — Art generation & CDN upload
For each category below, generate images via Gemini API (gemini-3-pro-image-preview),
save locally to img/vampire/<folder>/, upload to R2, then delete local files.
Use soft-shaded anime style; vampire/gothic aesthetic; crimson/black/dark purple palette.
- Zone banners (18) →
img/vampire/zones/→ CDNvampire/zones/ - Boss portraits (72) →
img/vampire/bosses/→ CDNvampire/bosses/ - Quest banners (match count) →
img/vampire/quests/→ CDNvampire/quests/ - Adventurer/thrall portraits (32) →
img/vampire/adventurers/→ CDNvampire/adventurers/ - Equipment icons (match count) →
img/vampire/equipment/→ CDNvampire/equipment/ - Achievement icons (match count) →
img/vampire/achievements/→ CDNvampire/achievements/ - Exploration area art (72) →
img/vampire/explorations/→ CDNvampire/explorations/ - Material icons (match count) →
img/vampire/materials/→ CDNvampire/materials/ - Story chapter banners (match count) →
img/vampire/story-chapters/→ CDNvampire/story-chapters/
Phase 4 — API changes
- Add
inGuildto PrismaPlayermodel → updateinitialGameStateif needed (already done in #134 — verify migration) - Update Prisma schema: no DB changes needed (expansion state is inside the
GameStateJSON blob) - Update
initialState.tsto includeexpansions: {}ininitialGameState - Update
sync-new-contentdebug route to inject/patch vampire expansion content when expansion is unlocked - Add vampire-specific unlock trigger: when base-game apotheosis count ≥ 1, set
expansions.vampiretoinitialVampireState()andunlocked: true - Update the load endpoint to pass expansion state through to the client
- Ensure prestige/transcendence/apotheosis routes only reset state for their own expansion (base game routes must NOT touch
expansions.*) - Add vampire prestige, transcendence, and apotheosis routes (mirrors of base game routes, scoped to
expansions.vampire) - Grant
Eternal Sovereigntyrole (ID:1486144657023959180) on vampire apotheosis
Phase 5 — Frontend changes
Expansion switcher
- Add expansion toggle buttons below the Early Access warning in the sidebar
- Always render all expansion buttons; disable any where
unlocked !== true - Active expansion stored in React state (not game state); defaults to
"base" - Switching expansion updates which data the UI panels display
Resource bar
- Show ALL currencies from ALL expansions as separate labelled lines
- Vampire currencies use distinct icons/colours (crimson tint for blood, etc.)
- The "expand" button label shows the gold-equivalent currency of the active expansion
Thematic UI
- When vampire expansion is active, swap labels: gold → Blood, essence → Ichor, etc.
- Apply
.vampire-modeCSS class to game container when vampire is active - Vampire colour palette: deep crimsons (
#5C0A1A), rich crimson (#C41E3A), blacks, desaturated purples
Tick engine
- Update
apps/web/src/engine/tick.tsto compute passive income for all unlocked expansions every tick (not just base game) - Offline income calculation must also cover all expansions
Profile
- Profile panel: tab stats by expansion (base game tab + one tab per unlocked expansion)
- Show correct thematic prestige/transcendence/apotheosis badge names per expansion
- Lifetime stats (gold earned, clicks, etc.) tracked separately per expansion
About / How to Play
- Update
aboutPanel.tsxHOW_TO_PLAYarray to document the expansion system
Phase 6 — Tests & CI
- Unit tests for all new data files (at minimum, validate structure/required fields)
- Unit tests for
initialVampireState() - Tests for vampire unlock trigger route
- Tests for vampire prestige/transcendence/apotheosis routes
- Tests for updated tick engine (expansion income)
- Maintain 100% coverage on
apps/apiandpackages/types - Full pipeline: lint → build → test passing before PR
Phase 7 — Final
- Delete
img/vampire/directory before committing - Update
MEMORY.mdwith new content counts - Open PR → request review